home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / mpl172b.zip / CONFIG.BAS < prev    next >
BASIC Source File  |  1989-09-05  |  155KB  |  4,172 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG CPC17-2B, Copyright 1983-89 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC VERSION CPC17-2B)
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   39 Cranbury Dr.
  8.       '   Trumbull, CT. 06611
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. CPC17-2B), to make copies of this *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring,      *
  22.       ' *        39 Cranbury Dr., Trumbul, CT. 06611                          *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1989 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' ****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE
  31. ' ****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NONE.PICKED$ = "<none>"    ' Standardized message
  37.       NUM.FILES = 8
  38.       NUM.GLOBAL = 4
  39.       NUM.MAIN = 18
  40.       NUM.SYSOP = 7
  41.       NUM.UTILITY = 12
  42.       NUM.LIBRARY = 7
  43.       VERSION.NUMBER$ = "17.2B"
  44.       I! = FRE(C$)
  45.       KEY OFF
  46.       CALL CNFGINIT
  47.       PRINT TAB(60)"tm"
  48.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  49.       PRINT
  50.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  51.       PRINT
  52.       X$ = "    "
  53.       PRINT "Copyright (c) 1983-1989 D. Thomas Mack, 39 Cranbury Dr., Trumbull, CT. 06611"
  54.       PRINT
  55.       PRINT X$;"    If you use RBBS-PC " + CONFIG.VERSION$ + " and find" ' KG060704
  56.       PRINT X$;"    it valuable, consider contributing to"           ' KG060704
  57.       PRINT ""
  58.       PRINT X$;"                 Capital PC Software Exchange"
  59.       PRINT X$;"                     Post Office Box 6128"
  60.       PRINT X$;"                Silver Spring, Maryland  20906"
  61.       PRINT
  62.       PRINT X$;"    You are free to copy and share RBBS-PC provided" ' KG060704
  63.       PRINT X$;"      1.  This program is not distributed in modified form."
  64.       PRINT X$;"      2.  No fee or consideration is charged for RBBS-PC itself."
  65. 10230 PRINT X$;"      3.  This notice is not bypassed or removed."
  66.       PRINT
  67. '
  68. ' *  DEFINE THE FUNCTIONS USED BY CONFIG
  69. '
  70.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2)) * 60 * 60) _
  71.                          + (VAL(MID$(TIME$,4,2)) * 60) _
  72.                          + (VAL(MID$(TIME$,7,2)) * 1)))
  73.       DEF FNHSH(X$) = ((ASC(X$) * 100  _
  74.                          + ASC(MID$(X$,(LEN(X$)/2) + .1,1)) * 10  _
  75.                          + ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
  76.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1)) * 10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  77.       DELAY! = FNTI! + 1
  78. 10480 GOSUB 60440
  79. 10490 LOCATE 22,15
  80.       PRINT SPC(64)
  81.       NODE.ID$ = ""
  82.       IF COMMAND$ <> "" THEN _
  83.         CONFIG.FILENAME$ = COMMAND$: _
  84.         GOTO 10530
  85.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  86.       CALL GETNUMYN ("Will you be running multiple copies of RBBS-PC",AB)
  87.       IF NOT AB THEN _
  88.          GOTO 10530
  89. 10510 GOSUB 22480
  90. '
  91. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS
  92. '
  93. 10530 ON ERROR GOTO 60010
  94.       FILE$ = CONFIG.FILENAME$
  95.       GOSUB 30000
  96.       M$ = "Z"
  97.       NO.DEF.FILE = FALSE
  98.       SUBBOARD = FALSE
  99.       IF OKAY THEN _
  100.          CALL CNFGINIT : _
  101.          GOTO 10536
  102.       IF LEN(CONFIG.FILENAME$) > 7 OR _
  103.          INSTR(CONFIG.FILENAME$,".") <> 0 THEN _
  104.          GOTO 10531
  105.       FILE$ = FILE$ + "C.DEF"
  106.       GOSUB 30000
  107.       IF OKAY THEN _
  108.          CALL CNFGINIT : _
  109.          CONFIG.FILENAME$ = FILE$ : _
  110.          GOTO 10536
  111.       CALL GETNUMYN ("Are you setting up a 'sub-board'",AB)
  112.       IF NOT AB THEN _
  113.          GOTO 10531
  114.       SUBBOARD = TRUE
  115.       BASE.NAME$ = CONFIG.FILENAME$
  116.       CONFIG.FILENAME$   = CONFIG.FILENAME$+"C.DEF"
  117. 10531 A$ = "Configuration file " + CONFIG.FILENAME$ + " not found.  Create new one"
  118.       CALL GETNUMYN (A$,AB)
  119.       IF NOT AB THEN _
  120.          SYSTEM
  121. 10532 X$ = "default location for RBBS files"
  122.       GOSUB 15205
  123.       DD$ = HJ$
  124.       CALL CNFGINIT
  125.       GOSUB 15790
  126.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  127.                        BULLETIN.MENU$
  128.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  129.                          BULLETIN.PREFIX$
  130.       NO.DEF.FILE = TRUE
  131.       GOTO 11710
  132. 10536 OPEN "I",#1,CONFIG.FILENAME$
  133. '
  134. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE
  135. '
  136. 11600 INPUT #1,CONFIG.FILE.VER$, _
  137.                DOWNLOAD.DRIVES$, _
  138.                SYSOP.PASSWORD.1$, _
  139.                SYSOP.PASSWORD.2$, _
  140.                SYSOP.FIRST.NAME$, _
  141.                SYSOP.LAST.NAME$, _
  142.                REQUIRED.RINGS, _
  143.                START.OFFICE.HOURS, _
  144.                END.OFFICE.HOURS, _
  145.                MINUTES.PER.SESSION!, _
  146.                MAX.ALLOWED.MSGS.FRM.DEF, _
  147.                ACT.MNTHS.B4.DELETING, _
  148.                UPLOAD.DIRECTORY$, _
  149.                EXPERT.USER, _
  150.                ACTIVE.BULLETINS, _
  151.                PROMPT.BELL, _
  152.                PCJR, _
  153.                MENUS.CAN.PAUSE, _
  154.                MENU$(1), _
  155.                MENU$(2), _
  156.                MENU$(3), _
  157.                MENU$(4), _
  158.                MENU$(5), _
  159.                MENU$(6), _
  160.                CONFERENCE.MENU$, _
  161.                CONFERENCE.VIEWER.SEC.LVL, _
  162.                WELCOME.INTERRUPTABLE, _
  163.                REMIND.FILE.TRANSFERS, _
  164.                PAGE.LENGTH, _
  165.                MAX.MESSAGE.LINES, _
  166.                DOORS.AVAILABLE, _
  167.                MO$
  168.       IF CONFIG.FILE.VER$ > VERSION.NUMBER$ OR _
  169.          CONFIG.FILE.VER$ < "17.1A" THEN _
  170.          PRINT "Config DEF file, " + CONFIG.FILENAME$ + " not " + CONFIG.VERSION$ : _
  171.          END
  172.       GOSUB 22340
  173. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _
  174.                MAIN.MESSAGE.BACKUP$, _
  175.                CALLERS.FILE$, _
  176.                COMMENTS.FILE$, _
  177.                MAIN.USER.FILE$, _
  178.                WELCOME.FILE$, _
  179.                NEWUSER.FILE$, _
  180.                DIRECTORY.EXTENTION$, _
  181.                COM.PORT$, _
  182.                BULLETINS.OPTIONAL, _
  183.                USER.INIT.COMMAND$, _
  184.                RTS$, _
  185.                DOS.VERSION, _
  186.                FG, _
  187.                BG, _
  188.                BORDER, _
  189.                RBBS.BAT$, _
  190.                RCTTY.BAT$
  191.       GOSUB 22340
  192. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _
  193.                FIRST.NAME.PROMPT$, _
  194.                HELP$(3), _
  195.                HELP$(4), _
  196.                HELP$(7), _
  197.                HELP$(9), _
  198.                BULLETIN.MENU$, _
  199.                BULLETIN.PREFIX$, _
  200.                DRIVE.FOR.BULLETINS$, _
  201.                MESSAGE.REMINDER, _
  202.                REQUIRE.NON.ASCII, _
  203.                ASK.EXTENDED.DESC, _
  204.                MAXIMUM.NUMBER.OF.NODES, _
  205.                NETWORK.TYPE, _
  206.                RECYCLE.TO.DOS, _
  207.                MAX.USR.FILE.SIZE.FRM.DEF, _
  208.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  209.                TRASHCAN.FILE$
  210.       DONT.ASK = TRUE
  211.       GOSUB 21895
  212.       DONT.ASK = FALSE
  213.       GOSUB 22340
  214. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _
  215.                DEFAULT.SECURITY.LEVEL, _
  216.                SYSOP.SECURITY.LEVEL, _
  217.                FILESEC.FILE$, _
  218.                SYSOP.MENU.SECURITY.LEVEL, _
  219.                CONFMAIL.LIST$, _
  220.                MAXIMUM.VIOLATIONS, _
  221.                SYSOP.FUNCTION(1), _
  222.                SYSOP.FUNCTION(2), _
  223.                SYSOP.FUNCTION(3), _
  224.                SYSOP.FUNCTION(4), _
  225.                SYSOP.FUNCTION(5), _
  226.                SYSOP.FUNCTION(6), _
  227.                SYSOP.FUNCTION(7), _
  228.                PASSWORD.FILE$, _
  229.                MAXIMUM.PASSWORD.CHANGES, _
  230.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  231.                OVERWRITE.SECURITY.LEVEL, _
  232.                DOORS.TERMINAL.TYPE, _
  233.                MAX.PER.DAY
  234.       GOSUB 22340
  235. 11680 INPUT #1,MAIN.FUNCTION(1), _
  236.                MAIN.FUNCTION(2), _
  237.                MAIN.FUNCTION(3), _
  238.                MAIN.FUNCTION(4), _
  239.                MAIN.FUNCTION(5), _
  240.                MAIN.FUNCTION(6), _
  241.                MAIN.FUNCTION(7), _
  242.                MAIN.FUNCTION(8), _
  243.                MAIN.FUNCTION(9), _
  244.                MAIN.FUNCTION(10), _
  245.                MAIN.FUNCTION(11), _
  246.                MAIN.FUNCTION(12), _
  247.                MAIN.FUNCTION(13), _
  248.                MAIN.FUNCTION(14), _
  249.                MAIN.FUNCTION(15), _
  250.                MAIN.FUNCTION(16), _
  251.                MAIN.FUNCTION(17), _
  252.                MAIN.FUNCTION(18), _
  253.                MIN.NEWCALLER.BAUD, _
  254.                WAIT.BEFORE.DISCONNECT
  255.       GOSUB 22340
  256. 11700 INPUT #1,FILES.FUNCTION(1), _
  257.                FILES.FUNCTION(2), _
  258.                FILES.FUNCTION(3), _
  259.                FILES.FUNCTION(4), _
  260.                FILES.FUNCTION(5), _
  261.                FILES.FUNCTION(6), _
  262.                FILES.FUNCTION(7), _
  263.                FILES.FUNCTION(8), _
  264.                UTILITY.FUNCTION(1), _
  265.                UTILITY.FUNCTION(2), _
  266.                UTILITY.FUNCTION(3), _
  267.                UTILITY.FUNCTION(4), _
  268.                UTILITY.FUNCTION(5), _
  269.                UTILITY.FUNCTION(6), _
  270.                UTILITY.FUNCTION(7), _
  271.                UTILITY.FUNCTION(8), _
  272.                UTILITY.FUNCTION(9), _
  273.                UTILITY.FUNCTION(10), _
  274.                UTILITY.FUNCTION(11), _
  275.                UTILITY.FUNCTION(12), _
  276.                GLOBAL.FUNCTION(1), _
  277.                GLOBAL.FUNCTION(2), _
  278.                GLOBAL.FUNCTION(3), _
  279.                GLOBAL.FUNCTION(4), _
  280.                UPLOAD.TIME.FACTOR!, _
  281.                COMPUTER.TYPE, _
  282.                REMIND.PROFILE, _
  283.                RBBS.NAME$, _
  284.                COMMANDS.BETWEEN.RINGS, _
  285.                DF, _                                                 ' KG072303
  286.                PAGING.PRINTER.SUPPORT$, _
  287.                MODEM.INIT.BAUD$
  288.       GOSUB 22340
  289. 11705 INPUT #1,TURN.PRINTER.OFF, _
  290.                DIRECTORY.PATH$, _
  291.                MIN.SEC.TO.VIEW, _
  292.                LIMIT.SEARCH.TO.FMS, _
  293.                DEFAULT.CATEGORY.CODE$, _
  294.                DIR.CATEGORY.FILE$, _
  295.                NEW.FILES.CHECK, _
  296.                MAX.DESC.LEN, _
  297.                SHOW.SECTION, _
  298.                COMMANDS.IN.PROMPT, _
  299.                NEWUSER.SETS.DEFAULTS, _
  300.                HELP.PATH$, _
  301.                HELP.EXTENSION$, _
  302.                MAIN.COMMANDS$, _
  303.                FILE.COMMANDS$, _
  304.                UTIL.COMMANDS$, _
  305.                GLOBAL.COMMANDS$, _
  306.                SYSOP.COMMANDS$
  307.       GOSUB 22340
  308. 11706 INPUT #1,RECYCLE.WAIT, _
  309.                LIBRARY.FUNCTION(1), _
  310.                LIBRARY.FUNCTION(2), _
  311.                LIBRARY.FUNCTION(3), _
  312.                LIBRARY.FUNCTION(4), _
  313.                LIBRARY.FUNCTION(5), _
  314.                LIBRARY.FUNCTION(6), _
  315.                LIBRARY.FUNCTION(7), _
  316.                LIBRARY.DRIVE$, _
  317.                LIBRARY.DIRECTORY.PATH$, _
  318.                LIBRARY.DIRECTORY.EXTENTION$, _
  319.                LIBRARY.WORK.DISK.PATH$, _
  320.                LIBRARY.MAX.DISK, _
  321.                LIBRARY.MAX.DIRECTORY, _
  322.                LIBRARY.MAX.SUBDIR, _
  323.                LIBRARY.SUBDIR.PREFIX$, _
  324.                LIBRARY.ARCHIVE.PATH$, _
  325.                LIBRARY.ARCHIVE.PROGRAM$, _
  326.                LIBRARY.COMMANDS$
  327.       GOSUB 22340
  328.       INPUT #1,UPLOAD.PATH$, _
  329.                FMS.DIRECTORY$, _
  330.                ANS.MENU$,_
  331.                REQUIRED.QUESTIONNAIRE$,_
  332.                REMEMBER.NEW.USERS, _
  333.                SURVIVE.NOUSER.ROOM, _
  334.                PROMPT.HASH$, _
  335.                START.HASH, _
  336.                LEN.HASH, _
  337.                PROMPT.INDIV$, _
  338.                START.INDIV, _
  339.                LEN.INDIV
  340.       GOSUB 22340
  341.       INPUT #1,BYPASS.MSGS, _
  342.                MUSIC, _
  343.                RESTRICT.BY.DATE, _
  344.                DAYS.TO.WARN, _
  345.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  346.                VOICE.TYPE, _
  347.                RESTRICT.VALID.CMDS, _
  348.                NEW.USER.DEFAULT.MODE, _
  349.                NEW.USER.LINE.FEEDS, _
  350.                ARKVIEW.PATH$, _        'ViewMod
  351.                NEW.USER.BELL, _
  352.                NEW.USER.CASE, _
  353.                MESSAGES.CAN.GROW, _
  354.                WRAP.CALLERS.FILE$, _
  355.                REDIRECT.IO.METHOD, _
  356.                AUTO.UPGRADE.SEC, _
  357.                HALT.ON.ERROR, _
  358.                NEW.PUBLIC.MSGS.SECURITY, _
  359.                NEW.PRIVATE.MSGS.SECURITY, _
  360.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  361.                SL.CATEGORIZE.UPLOADS, _
  362.                BAUDOT, _
  363.                TIME.TO.DROP.TO.DOS, _
  364.                EXPIRED.SECURITY, _
  365.                DTR.DROP.DELAY, _
  366.                ASK.IDENTITY, _
  367.                MAX.REG.SEC, _
  368.                BUFFER.SIZE, _
  369.                MLCOM, _
  370.                SHOOT.YOURSELF, _
  371.                DEFAULT.EXTENSION$, _
  372.                NEW.USER.DEFAULT.PROTOCOL$, _
  373.                NEW.USER.GRAPHICS$, _
  374.                NET.MAIL$, _
  375.                MASTER.DIRECTORY.NAME$, _
  376.                PROTO.DEF$, _
  377.                UPCAT.HELP$, _
  378.                ALWAYS.STREW.TO$, _
  379.                LAST.NAME.PROMPT$
  380.       GOSUB 22340
  381.       INPUT #1,PERSONAL.DRVPATH$, _
  382.                PERSONAL.DIR$, _
  383.                PERSONAL.BEGIN, _
  384.                PERSONAL.LEN, _
  385.                PERSONAL.PROTOCOL$, _
  386.                PERSONAL.CONCAT , _
  387.                PRIVATE.READ.SEC, _
  388.                PUBLIC.READ.SEC, _
  389.                SEC.CHANGE.MSG, _
  390.                KEEP.INIT.BAUD, _
  391.                MAIN.PUI$, _
  392.                DEFAULT.ECHOER$, _
  393.                HOST.ECHO.ON$, _
  394.                HOST.ECHO.OFF$, _
  395.                SWITCH.BACK, _
  396.                DEFAULT.LINE.ACK$, _
  397.                ALTDIR.EXTENSION$, _
  398.                DIRECTORY.PREFIX$
  399.       GOSUB 22340
  400.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  401.                MODEM.INIT.WAIT.TIME, _
  402.                MODEM.COMMAND.DELAY.TIME, _
  403.                TURBO.RBBS
  404.       GOSUB 22340
  405. 11707 INPUT #1,DNLD.SUB, _
  406.                WILL.SUBDIRS.B.USED, _
  407.                UPLOAD.TO.SUBDIR, _
  408.                DOWNLOAD.TO.SUBDIR, _
  409.                UPLOAD.SUBDIR$, _
  410.                MIN.OLDCALLER.BAUD, _
  411.                MAX.WORK.VAR, _
  412.                DISKFULL.GO.OFFLINE, _
  413.                EXTENDED.LOGGING, _
  414.                USER.RESET.COMMAND$, _
  415.                USER.COUNT.RINGS.COMMAND$, _
  416.                USER.ANSWER.COMMAND$, _
  417.                USER.GO.OFFHOOK.COMMAND$, _
  418.                DISK.FOR.DOS$, _
  419.                DUMB.MODEM, _
  420.                COMMENTS.AS.MESSAGES, _
  421.                LSB, _
  422.                MSB, _
  423.                LINE.CONTROL.REGISTER, _
  424.                MODEM.CONTROL.REGISTER, _
  425.                LINE.STATUS.REGISTER, _
  426.                MODEM.STATUS.REGISTER
  427.       GOSUB 22340
  428.       INPUT #1,KEEP.TIME.CREDITS, _
  429.                XON.XOFF, _
  430.                ALLOW.CALLER.TURBO, _
  431.                USE.DEVICE.DRIVER$, _
  432.                PRELOG$, _
  433.                NEW.USER.QUESTIONNAIRE$, _
  434.                EPILOG$, _
  435.                REGISTRATION.PROGRAM$, _
  436.                QUES.PATH$, _
  437.                USER.LOCATION$, _
  438.                USER.INITIALIZE.COMMAND$, _
  439.                USER.FIRMWARE.CLEAR.CMND$, _
  440.                USER.FIRMWARE.WRITE.CMND$, _
  441.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  442.                SIZE.OF.STACK, _
  443.                SECURITY.EXEMPT.FROM.EPILOG, _
  444.                USE.BASIC.WRITES, _
  445.                DOSANSI, _
  446.                ESCAPE.INSECURE, _
  447.                USE.DIR.ORDER, _
  448.                ADD.DIR.SECURITY, _
  449.                MAX.EXTENDED.LINES, _
  450.                DF$
  451.       GOSUB 22340
  452.       INPUT #1,LOGON.MAIL.LEVEL$, _
  453.                MACRO.DRVPATH$, _
  454.                MACRO.EXTENSION$, _
  455.                EMPHASIZE.ON.DEF$, _
  456.                EMPHASIZE.OFF.DEF$, _
  457.                FG.1.DEF$, _
  458.                FG.2.DEF$, _
  459.                FG.3.DEF$, _
  460.                FG.4.DEF$, _
  461.                SECVIO.HLP$, _
  462.                FOSSIL, _
  463.                MAX.CARRIER.WAIT, _
  464.                CALLER.BKGRD, _
  465.                SMART.TEXT, _
  466.                TIME.LOCK, _
  467.                WRITE.BUF.DEF, _
  468.                SEC.KILL.ANY, _
  469.                DOORS.DEF$, _
  470.                SCREEN.OUT.MSG$, _
  471.                AUTOPAGE.DEF$
  472.       GOSUB 21905
  473.       GOSUB 22340
  474.       IF MAX.CARRIER.WAIT < 1 THEN _
  475.          MAX.CARRIER.WAIT = 30
  476.       CALL ANSIDECODE (FG.1.DEF$)
  477.       CALL ANSIDECODE (FG.2.DEF$)
  478.       CALL ANSIDECODE (FG.3.DEF$)
  479.       CALL ANSIDECODE (FG.4.DEF$)
  480.       IF LEFT$(MACRO.EXTENSION$,1) = "." THEN _
  481.          MACRO.EXTENSION$ = RIGHT$(MACRO.EXTENSION$,LEN(MACRO.EXTENSION$)-1)
  482.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  483.          GOTO 11710
  484.       FOR I = 1 TO DNLD.SUB
  485.          INPUT #1,DNLD$(I)
  486.       NEXT
  487.       GOSUB 22340
  488. '
  489. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED
  490. '
  491. 11710 IF CALLERS.FILE$ = "" THEN _
  492.          CALLERS.FILE$ = NONE.PICKED$
  493.       IF ALTDIR.EXTENSION$ = "" THEN _
  494.          ALTDIR.EXTENSION$ = NONE.PICKED$
  495.       IF ALWAYS.STREW.TO$ = "" THEN _
  496.          ALWAYS.STREW.TO$ = NONE.PICKED$
  497.       IF QUES.PATH$ = "" THEN _
  498.          QUES.PATH$ = NONE.PICKED$
  499.       IF NEW.USER.QUESTIONNAIRE$ = "" THEN _
  500.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$
  501.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  502.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  503.       IF NET.MAIL$ = "NONE" THEN _
  504.          NET.MAIL$ = NONE.PICKED$
  505.       IF CONFMAIL.LIST$ = "" THEN _
  506.          CONFMAIL.LIST$ = NONE.PICKED$
  507.       X$ = BULLETIN.MENU$
  508.       CALL BRKFNAME (X$,Z$,BULLETIN.MENU$,Y$,-1)
  509.       IF Y$ <> "" THEN _
  510.          BULLETIN.MENU$ = BULLETIN.MENU$ + Y$
  511.       X$ = BULLETIN.PREFIX$
  512.       CALL BRKFNAME (X$,Z$,BULLETIN.PREFIX$,Y$,-1)
  513.       IF RECYCLE.TO.DOS = 0 THEN _
  514.          RECYCLE.TO.DOS$ = "INTERNAL" _
  515.       ELSE RECYCLE.TO.DOS$ = "SYSTEM
  516.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3)) - 1)
  517.       SF = SYSOP.FUNCTION(1)
  518.       GOSUB 16062
  519.       FOR I = 2 TO NUM.SYSOP
  520.          IF SYSOP.FUNCTION(I) > SF THEN _
  521.             GOTO 11790
  522.          SF = SYSOP.FUNCTION(I)
  523. 11790 NEXT
  524.       MM = MAIN.FUNCTION(1)
  525.       FOR I = 1 TO NUM.MAIN
  526.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  527.          IF MAIN.FUNCTION(I)    > MM THEN _
  528.             GOTO 11810
  529.          MM = MAIN.FUNCTION(I)
  530. 11810 NEXT
  531.       FC = FILES.FUNCTION(1)
  532.       FOR I = 1 TO NUM.FILES
  533.          FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  534.          IF FILES.FUNCTION(I) > FC THEN _
  535.             GOTO 11830
  536.          FC = FILES.FUNCTION(I)
  537. 11830 NEXT
  538.       UE = UTILITY.FUNCTION(1)
  539.       FOR I = 1 TO NUM.UTILITY
  540.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  541.          IF UTILITY.FUNCTION(I) > UE THEN _
  542.             GOTO 11850
  543.          UE = UTILITY.FUNCTION(I)
  544. 11850 NEXT
  545.       PS = LIBRARY.FUNCTION(1)
  546.       FOR I = 1 TO NUM.LIBRARY
  547.          LIBRARY.FUNCTION$(I,2) = MID$(LIBRARY.COMMANDS$,I,1)
  548.          IF LIBRARY.FUNCTION(I) > PS THEN _
  549.            GOTO 11860
  550.          PS = LIBRARY.FUNCTION(I)
  551. 11860 NEXT
  552.       FOR I = 1 TO NUM.GLOBAL
  553.          GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  554.       NEXT
  555.       CLOSE #1
  556.       GOSUB 50480
  557.       GOSUB 50530
  558. 11870 IF EXPERT.USER = 0 THEN _
  559.          EXPERT.USER$ = "NOVICE
  560.       IF EXPERT.USER = -1 THEN _
  561.          EXPERT.USER$ = "EXPERT
  562.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  563.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$) - 1))
  564.       PROMPT.BELL$ = "ON"
  565.       IF PROMPT.BELL = 0 THEN _
  566.          PROMPT.BELL$ = "OFF
  567.       GOSUB 15780
  568.       IF SYSOP.PASSWORD.1$ = "" OR SYSOP.PASSWORD.2$ = "" THEN _
  569.          MN1$ = "<Disabled>" : _
  570.          MN2$ = "" _
  571.       ELSE MN1$ = SYSOP.PASSWORD.1$ : _
  572.            MN2$ = SYSOP.PASSWORD.2$
  573.       M11$ = "NO"
  574.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  575.          M11$ = "YES"
  576.       IF START.HASH < 1 THEN _
  577.          START.HASH = 1
  578.       IF LEN.HASH < 2 THEN _
  579.          LEN.HASH = 31
  580.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  581.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  582.       GOSUB 18002
  583.       GOSUB 18102
  584.       I = 1
  585.       GOSUB 13030
  586.       IF NO.DEF.FILE = FALSE THEN _
  587.          GOTO 12151
  588.       IF NOT SUBBOARD THEN _
  589.          GOTO 12151
  590.       MAIN.MESSAGE.FILE$ = BASE.NAME$+"M.DEF"
  591.       MAIN.USER.FILE$    = BASE.NAME$+"U.DEF"
  592. 12151 CONFERENCE.MODE = 0
  593.       SUBBOARD = FALSE
  594.       MAINMSG$ = MAIN.MESSAGE.FILE$
  595.       MAINUSR$ = MAIN.USER.FILE$
  596. 12160 KEY OFF
  597. '
  598. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  599. '
  600.       FILE$ = MAIN.MESSAGE.FILE$
  601.       GOSUB 30000
  602.       NO.OLD.FILE = FALSE
  603.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  604.          GOTO 12170
  605.       NO.OLD.FILE = TRUE
  606.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  607.       CALL GETNUMYN (A$,AB)
  608.       IF NOT AB THEN _
  609.          SYSTEM
  610.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  611.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  612.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  613.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  614.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  615.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  616.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  617.                                + 1 _
  618.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  619.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  620.       B1 = MAXIMUM.NUMBER.OF.NODES
  621.       B3! = HIGHEST.MESSAGE.RECORD
  622.       GOSUB 22080
  623.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  624. 12170 GOSUB 30040                        ' READ THE CHECKPOINT RECORD
  625.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  626.       MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD - FIRST.MESSAGE.RECORD) / 5) + 1
  627.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  628.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  629.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  630.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  631.          GOSUB 30450                     ' READ THE CHECKPOINT RECORD
  632.       FILE$ = MAIN.USER.FILE$            ' Check for USERS file
  633.       GOSUB 30000
  634.       NO.OLD.FILE = FALSE
  635.       IF OKAY THEN _
  636.          GOSUB 50500 : _
  637.          GOTO 12189
  638.       NO.OLD.FILE = TRUE
  639.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  640.       A$ = MAIN.USER.FILE$
  641.       GOSUB 22140
  642.       GOSUB 22150
  643. 12189 FOR I = 1 TO 10
  644.          KEY I,""
  645.       NEXT
  646.       NO.OLD.FILE = FALSE
  647.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  648.       GOSUB 22140
  649.       IF NO.DEF.FILE = FALSE THEN  _
  650.          GOTO 12190
  651.       GOSUB 18700
  652.       NO.DEF.FILE = FALSE
  653. '
  654. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU
  655. '
  656. 12190 IF KSTACKED$ = "" THEN _
  657.          IX = 0
  658. 12320 CALL DISPLAY
  659.       IF IX = 21 THEN _
  660.          GOTO 22350
  661.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (part 1)
  662.                     12624, _  ' 2        F2 - Global Parameters (part 2)
  663.                     12626, _  ' 3        F3 - Global Parameters (part 3)
  664.                     12628, _  ' 4        F4 - RBBS-PC System Files (part 1)
  665.                     12630, _  ' 5        F5 - RBBS-PC System Files (part 2)
  666.                     12632, _  ' 6        F6 - RBBS-PC "doors"
  667.                     12634, _  ' 7        F7 - RBBS-PC security (part 1)
  668.                     12636, _  ' 8        F8 - RBBS-PC security (part 2)
  669.                     12640, _  ' 9        F9 - Multiple RBBS-PC parameters
  670.                     12641, _  '10       F10 - RBBS-PC's Utilities
  671.                     12642, _  '11  Shift-F1 - RBBS-PC File Manager
  672.                     12643, _  '12  Shift-F2 - RBBS-PC comm. parameters (part 1)
  673.                     12644, _  '13  Shift-F3 - RBBS-PC comm. parameters (part 2)
  674.                     12645, _  '14  Shift-F4 - RBBS-PC Net Mail
  675.                     12646, _  '15  Shift-F5 - New user's parameters
  676.                     12647, _  '16  Shift-F6 - Library parameters
  677.                     12648     '17  Shift-F7 - RBBS-PC Color parameters
  678. '
  679. ' *  HANDLE UNSUPPORTED REQUEST
  680. '
  681. 12325 IX = IPAGE
  682.       GOTO 12320
  683. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  684.                        12910, _  '   2 SYSOP's last name
  685.                        13140, _  '   3 SYSOP's default signon mode
  686.                        13210, _  '   4 SYSOP's office hours
  687.                        13224, _  '   5 Page SYSOP with printer's bell
  688.                        13249, _  '   6 Go off-line when disk is full
  689.                        13750, _  '   7 Prompt bell
  690.                        13840, _  '   8 Maximum minutes per session
  691.                        16650, _  '   9 Maximum minutes per day
  692.                        15234, _  '  10 Factor to extend time for uploads
  693.                        13940, _  '  11 Months of inactivity before deleted
  694.                        13131, _  '  12 Name of this RBBS-PC
  695.                        15530, _  '  13 Foreground color
  696.                        15590, _  '  14 Background color
  697.                        15650, _  '  15 Border color
  698.                        13320, _  '  16 ANSI.SYS in CONFIG.SYS?
  699.                        13330, _  '  17 Control code for Smart Text
  700.                        17725, _  '  18 AutoPage def file
  701.                        13000, _  '  19 Level of logon mail report
  702.                        12325     '  20
  703.       GOTO 12325
  704. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  705.                        16690, _  '  22 Remind users of uploads and downloads
  706.                        16722, _  '  23 Remind users of their profile
  707.                        17600, _  '  24 Enable download of new files at logon
  708.                        16730, _  '  25 Specify default page length
  709.                        16790, _  '  26 Set maximum number of lines/message
  710.                        16000, _  '  27 Is system "welcome" interruptable?
  711.                        15840, _  '  28 Are the system bulletins optional?
  712.                        16040, _  '  29 Type of PC running RBBS-PC
  713.                        17230, _  '  30 Symbols for SYSOP's commands
  714.                        17240, _  '  31 Symbols for main menu's commands
  715.                        17250, _  '  32 Symbols for file menu's commands
  716.                        17260, _  '  33 Symbols for utilities menu's commands
  717.                        17264, _  '  34 Symbols for "global" commands
  718.                        17500, _  '  35 Show section at command prompt?
  719.                        17550, _  '  36 Show commands at command prompt?
  720.                        15830, _  '  37 Restrict valid cmnds to current section
  721.                        15820, _  '  38 Use machine language subroutines?
  722.                        15825, _  '  39 Use BASIC PRINT for screen writes?
  723.                        16795     '  40 Set max # of lines for extended desc
  724.       GOTO 12325
  725. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  726.                        18100, _  '  42 Field to distinguish users with same id
  727.                        17800, _  '  43 Where personal id begins in user rec
  728.                        17810, _  '  44 Length of personal id in user rec
  729.                        17830, _  '  45 First Name prompt
  730.                        17840, _  '  46 Last Name prompt
  731.                        17850, _  '  47 Enforce upload/download ratios
  732.                        17630, _  '  48 Restrict users by date
  733.                        18510, _  '  49 Security level when subscription expires
  734.                        18530, _  '  50 Days before expiration to warn user
  735.                        18520, _  '  51 Days a newuser gets when registers
  736.                        17610, _  '  52 Turn printer off on recycle
  737.                        17620, _  '  53 Play music for RBBS themes?
  738.                        21760, _  '  54 Buffer size for text files
  739.                        16032, _  '  55 Size of stack space to use
  740.                        22550, _  '  56 Notify users when SYSOP wants system?
  741.                        17845, _  '  57 Ask users their (city/state)
  742.                        17625, _  '  58 Order show dirs for ALL option
  743.                        21770, _  '  59 Buffer size on writes
  744.                        21900     '  60 Voice synthesizer support
  745.       GOTO 12325
  746. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  747.                        15290, _  '  62 Number of active bulletins
  748.                        14800, _  '  63 Prefix used to name bulletin files
  749.                        14810, _  '  64 Drive and path for 'help' files
  750.                        14820, _  '  65 Prefix of nine major help files
  751.                        14825, _  '  66 Extension for individual help files
  752.                        14915, _  '  67 Help file for categorizing uploads
  753.                        14830, _  '  68 Name of 'newuser' file
  754.                        14840, _  '  69 Name of 'welcome" file
  755.                        14860, _  '  70 Name of SYSOP's commands menu
  756.                        14870, _  '  71 Name of main message command menu
  757.                        14880, _  '  72 Name of file subsystem command menu
  758.                        14890, _  '  73 Name of utilities command menu
  759.                        14900, _  '  74 Menu listing available conferences
  760.                        14905, _  '  75 Menu of questionnaires
  761.                        14815, _  '  76 Drive/path for optional questionnaires
  762.                        18310, _  '  77 Name of main PUI
  763.                        15835, _  '  78 Can menus pause in the middle?
  764.                        15850, _  '  79 Macro drive/path
  765.                        15860     '  80 Macro extension
  766.       GOTO 12325
  767. 12630 ON ILOOKUP GOSUB 14910, _  '  81 File of unacceptable user names
  768.                        17700, _  '  82 Name of required questionnaire
  769.                        17710, _  '  83 Name of "prelog" file
  770.                        17720, _  '  84 Name of New User questionnaire
  771.                        17730, _  '  85 Name of "epilog" questionnaire
  772.                        15460, _  '  86 Name of 'message' file
  773.                        15500, _  '  87 Name of 'user' file
  774.                        15464, _  '  88 Name of 'comments' file
  775.                        15993, _  '  89 Record comments as private messages?
  776.                        15461, _  '  90 Name of 'callers' file
  777.                        15991, _  '  91 Extened logging to 'callers' file?
  778.                        22550, _  '  92 Wrap-around the 'callers' file?
  779.                        12670, _  '  93 Conferences to search for new mail
  780.                        21780, _  '  94 Max # of work variables
  781.                        12325, _  '  95
  782.                        12325, _  '  96
  783.                        12325, _  '  97
  784.                        12325, _  '  98
  785.                        12325, _  '  99
  786.                        12325     ' 100
  787.       GOTO 12325
  788. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  789.                        16130, _  ' 102 Name of menu listing available doors
  790.                        16140, _  ' 103 Name of file built dynamically for doors
  791.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  792.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  793.                        16170, _  ' 106 Enable CTTY command for doors
  794.                        18640, _  ' 107 Name of program to invoke at logon
  795.                        17215, _  , 108 Who subject to logon door
  796.                        18625, _  ' 109 Doors control file
  797.                        12325, _  ' 110
  798.                        12325, _  ' 111
  799.                        12325, _  ' 112
  800.                        12325, _  ' 113
  801.                        12325, _  ' 114
  802.                        12325, _  ' 115
  803.                        12325, _  ' 116
  804.                        12325, _  ' 117
  805.                        12325, _  ' 118
  806.                        12325, _  ' 119
  807.                        12325     ' 120
  808.       GOTO 12325
  809. 12634 ON ILOOKUP GOSUB 12980, _  ' 121 Pseudonym to sign on remotely as SYSOP
  810.                        12990, _  ' 122 Escape logs on with no security
  811.                        17160, _  ' 123 Minimum security level to logon
  812.                        17170, _  ' 124 Default security level for new users
  813.                        17180, _  ' 125 SYSOP's security level
  814.                        17200, _  ' 126 Minimum security to see SYSOP's menu
  815.                        17210, _  ' 127 Min security to add extended desc
  816.                        17220, _  ' 128 Max # security violations allowed
  817.                        17230, _  ' 129 Security levels for SYSOP commands
  818.                        17240, _  ' 130 Security levels for main commands
  819.                        17250, _  ' 131 Security levels for file commands
  820.                        17260, _  ' 132 Security levels for utilities commands
  821.                        17264, _  ' 133 Security level for 'global' commands'
  822.                        17290, _  ' 134 Max # password changes allowed
  823.                        17300, _  ' 135 Min. security for temp. passwords
  824.                        17310, _  ' 136 Min. security to overwrite on uploads
  825.                        17316, _  ' 137 User's security exempted from packing
  826.                        15310, _  ' 138 Default security to read new Priv. Msg.
  827.                        15320, _  ' 139 Default security to read new Public Msg.
  828.                        15330     ' 140 Min. security to change msg.'s security
  829.       GOTO 12325
  830. 12636 ON ILOOKUP GOSUB 22550, _  ' 141 Call back verification of all/new users
  831.                        18630, _  ' 142 Drive/path for personal files
  832.                        12750, _  ' 143 Name of personal directory
  833.                        17820, _  ' 144 What protocol required for personal dnld
  834.                        17190, _  ' 145 File listing download-secured files
  835.                        17270, _  ' 146 File name with privileged passwords
  836.                        17645, _  ' 147 Concatenate ASCII files in pers. dnld?
  837.                        18515, _  ' 148 Security level to categorize uploads
  838.                        18500, _  ' 149 Min. security to view new uploads
  839.                        16033, _  ' 150 Security level exempt from "epilog"
  840.                        18545, _  ' 151 Min. security to automatically add users
  841.                        18340, _  ' 152 Min. security to use turbo logon
  842.                        18345, _  ' 153 Min. security to add dir entry
  843.                        17280, _  ' 154 Help file for security violation
  844.                        18330, _  ' 155 Time Lock Selection
  845.                        17640, _  ' 156 Auto upgrade security from main
  846.                        17635, _  ' 157 Min sec to read/kill all msgs
  847.                        13010, _  ' 158 How screen out lines from msg
  848.                        12325, _  ' 159
  849.                        12325     ' 160
  850.       GOTO 12325
  851. 12640 ON ILOOKUP GOSUB 21750, _  ' 161 Maximum number of concurrent RBBS-PC's
  852.                        21810, _  ' 162 Environment running RBBS-PC
  853.                        21950, _  ' 163 Method that RBBS-PC re-cycles with
  854.                        21910, _  ' 164 Number of records in 'user' file
  855.                        22040, _  ' 165 Number of records in 'message' file
  856.                        13890, _  ' 166 Maximum number of messages allowed
  857.                        25040, _  ' 167 Conference file maintenance
  858.                        14845, _  ' 168 Default extension compressed files
  859.                        22030, _  ' 169 Can messages grow
  860.                        12325, _  ' 170
  861.                        12325, _  ' 171
  862.                        12325, _  ' 172
  863.                        12325, _  ' 173
  864.                        12325, _  ' 174
  865.                        12325, _  ' 175
  866.                        12325, _  ' 176
  867.                        12325, _  ' 177
  868.                        12325, _  ' 178
  869.                        12325, _  ' 179
  870.                        12325     ' 180
  871.       IF REFRESH = 1 THEN _
  872.          REFRESH = 0 : _
  873.          GOTO 12151
  874.       IF REFRESH = 2 THEN _
  875.          REFRESH = 0 : _
  876.          GOTO 12160
  877.       GOTO 12325
  878. 12641 ON ILOOKUP GOSUB 23160, _  ' 181 Pack the 'messages' file
  879.                        22570, _  ' 182 Rebuild the 'user' file
  880.                        23630, _  ' 183 Print the message headers
  881.                        23740, _  ' 184 Renumber messages
  882.                        23620, _  ' 185 Repair the 'message' file
  883.                        24050, _  ' 186 Require users to answer questionnaire
  884.                        24790, _  ' 187 Check FMS directory
  885.                        13180, _  ' 188 Check Personal Download directory
  886.                        18700, _  ' 189 Check critical parameters
  887.                        18800, _  ' 190 Set New parameters
  888.                        24795, _  ' 191 Reset active printers for all nodes
  889.                        24040, _  ' 192 Set Highlight to match graphics
  890.                        12325, _  ' 193
  891.                        12325, _  ' 194
  892.                        12325, _  ' 195
  893.                        12325, _  ' 196
  894.                        12325, _  ' 197
  895.                        12325, _  ' 198
  896.                        12325, _  ' 199
  897.                        12325     ' 200
  898.       GOTO 12325
  899. 12642 ON ILOOKUP GOSUB 14920, _  ' 201 Drive available for uploading
  900.                        12730, _  ' 202 Name of directory for uploading
  901.                        18550, _  ' 203 Drive/path for upload dir
  902.                        13470, _  ' 204 Drive(s) available for downloading
  903.                        25380, _  ' 205 Are DOS subdirectories used?
  904.                        25420, _  ' 206 Upload to a DOS subdirectory?
  905.                        25460, _  ' 207 Are downloads from DOS subdirectories?
  906.                        25495, _  ' 208 List, change, add, delete subdir.?
  907.                        14850, _  ' 209 Extension for file directories
  908.                        14855, _  ' 210 Alternate directory extension
  909.                        14857, _  ' 211 Name (prefix) of dir of dir
  910.                        15920, _  ' 212 Omit directory list from N>ew command?
  911.                        18350, _  ' 213 Copy upload descriptions to another file
  912.                        12740, _  ' 214 FMS directory name
  913.                        17590, _  ' 215 Limit file searches to upload dir
  914.                        18200, _  ' 216 Default category codes for uploads
  915.                        18300, _  ' 217 File name with valid category codes
  916.                        18360, _  ' 218 Restrict dir search for 'ALL' to
  917.                        18400, _  ' 219 Length of description of uploads
  918.                        18600     ' 220 Drive/path directory files
  919.       GOTO 12325
  920. 12643 ON ILOOKUP GOSUB 14120, _  ' 221 Communications Port being used
  921.                        15240, _  ' 222 Seconds for modem to initalize
  922.                        15250, _  ' 223 Seconds to wait before issuing cmds.
  923.                        13228, _  ' 224 Number of rings to answer on
  924.                        15710, _  ' 225 Use standard RBBS-PC modem commands
  925.                        12325, _  ' 226 Microcom's MNP available?     ' KG072303
  926.                        16121, _  ' 227 Issue modem commands between rings?
  927.                        16124, _  ' 228 Baud rate to initially open modem at
  928.                        16031, _  ' 229 Seconds to wait before disconnecting
  929.                        16725, _  ' 230 Is a dumb modem being used?
  930.                        23731, _  ' 231 Initialize Hayes 2400 firmware
  931.                        18540, _  ' 232 DTR drop delay time
  932.                        18620, _  ' 233 Where external protocol pgms are
  933.                        17650, _  ' 234 Always check for autodownload support
  934.                        15880, _  ' 235 Require non-ASCII protocol?
  935.                        13280, _  ' 236 If no calls, recycle after
  936.                        13290, _  ' 237 Leave modem at initial baud
  937.                        12325, _  ' 238
  938.                        12325, _  ' 239
  939.                        12325     ' 240
  940.       GOTO 12325
  941. 12644 ON ILOOKUP GOSUB 13295, _  ' 241 Switch back when change comm. parms.
  942.                        13238, _  ' 242 Min. baud for new callers
  943.                        13242, _  ' 243 Min. baud for old callers
  944.                        13260, _  ' 244 Use CTS for modem flow control?
  945.                        13310, _  ' 245 Use XON/XOFF for flow control
  946.                        13270, _  ' 246 Max time to wait for carrier
  947.                        12325, _  ' 247
  948.                        12325, _  ' 248
  949.                        12325, _  ' 249
  950.                        12325, _  ' 250
  951.                        12325, _  ' 251
  952.                        12325, _  ' 252
  953.                        12325, _  ' 253
  954.                        12325, _  ' 254
  955.                        12325, _  ' 255
  956.                        12325, _  ' 256
  957.                        12325, _  ' 257
  958.                        12325, _  ' 258
  959.                        12325, _  ' 259
  960.                        12325     ' 260
  961.       GOTO 12325
  962. 12645 ON ILOOKUP GOSUB 26040, _  ' 261 Time of day to drop to DOS
  963.                        26070, _  ' 262 NET-MAIL driver to invoke
  964.                        26100, _  ' 263 Echo on command for host
  965.                        26110, _  ' 264 Echo off command for host
  966.                        13285, _  ' 265 Echo remote input?
  967.                        26105, _  ' 266 ASCII upload line acknowledge
  968.                        12325, _  ' 267
  969.                        12325, _  ' 268
  970.                        12325, _  ' 269
  971.                        12325, _  ' 270
  972.                        12325, _  ' 271
  973.                        12325, _  ' 272
  974.                        12325, _  ' 273
  975.                        12325, _  ' 274
  976.                        12325, _  ' 275
  977.                        12325, _  ' 276
  978.                        12325, _  ' 277
  979.                        12325, _  ' 278
  980.                        12325, _  ' 279
  981.                        12325     ' 280
  982.       GOTO 12325
  983. 12646 ON ILOOKUP GOSUB 17560, _  ' 281 Prompt new users for their preferences
  984.                        22550, _  ' 282 New users default sign-on mode
  985.                        22550, _  ' 283 New users default file-transfer mode
  986.                        22550, _  ' 284 Line feeds for new users default to
  987.                        20018, _  ' 285 Drive/path for View Mod (eg C:\VIEW)    'Viewmod
  988.                        22550, _  ' 286 Prompt bell for new users defaults to
  989.                        22550, _  ' 287 New users 'graphics' ability is
  990.                        22550, _  ' 288 New users upper/lower case
  991.                        22550, _  ' 289 New users margins defaults are
  992.                        17570, _  ' 290 Remember new users
  993.                        17580, _  ' 291 Survive no user room
  994.                        12325, _  ' 292
  995.                        12325, _  ' 293
  996.                        12325, _  ' 294
  997.                        12325, _  ' 295
  998.                        12325, _  ' 296
  999.                        12325, _  ' 297
  1000.                        12325, _  ' 298
  1001.                        12325, _  ' 299
  1002.                        12325     ' 300
  1003.       GOTO 12325
  1004. 12647 ON ILOOKUP GOSUB 20000, _  ' 301 Drive for Library
  1005.                        20010, _  ' 302 Drive/path for directory
  1006.                        20020, _  ' 303 Extension for directory lists
  1007.                        20030, _  ' 304 Drive/path for work disk
  1008.                        20040, _  ' 305 # of disks in Library
  1009.                        20050, _  ' 306 # of Master directories
  1010.                        20060, _  ' 307 # of subdirectories in each master
  1011.                        20070, _  ' 308 Prefix of subdirectory on Library
  1012.                        20080, _  ' 309 Name of subsystem command menu
  1013.                        20090, _  ' 310 Symbols to use for menu commands
  1014.                        20090, _  ' 311 Security levels for menu functions
  1015.                        20100, _  ' 312 Drive/path of ARCHIVE utility
  1016.                        20110, _  ' 313 Name of ARCHIVE utility
  1017.                        12325, _  ' 314
  1018.                        12325, _  ' 315
  1019.                        12325, _  ' 316
  1020.                        12325, _  ' 317
  1021.                        12325, _  ' 318
  1022.                        12325, _  ' 319
  1023.                        12325     ' 320
  1024.       GOTO 12325
  1025. 12648 ON ILOOKUP GOSUB 26115, _  ' 321 Turn on Emphasis
  1026.                        26120, _  ' 322 Restore text to normal
  1027.                        12850, _  ' 323 1st Foreground Color
  1028.                        12860, _  ' 324 2nd Foreground Color
  1029.                        12870, _  ' 325 3rd Foreground Color
  1030.                        12880, _  ' 326 4th Foreground Color
  1031.                        12890, _  ' 327 Caller Background Color
  1032.                        12325, _  ' 328
  1033.                        12325, _  ' 329
  1034.                        12325, _  ' 330
  1035.                        12325, _  ' 331
  1036.                        12325, _  ' 332
  1037.                        12325, _  ' 333
  1038.                        12325, _  ' 334
  1039.                        12325, _  ' 335
  1040.                        12325, _  ' 336
  1041.                        12325, _  ' 337
  1042.                        12325, _  ' 338
  1043.                        12325, _  ' 339
  1044.                        12325     ' 340
  1045.       GOTO 12325
  1046. '
  1047. ' * LIST OF CONFERENCES TO SEARCH FOR NEW MAIL
  1048. '
  1049. 12670 CALL GETNUMYN ("Do you want to notify callers of conference mail",X)
  1050.       IF NOT X THEN _
  1051.          CONFMAIL.LIST$ = NONE.PICKED$ : _
  1052.          RETURN
  1053.       GOSUB 17340
  1054.       GOSUB 17740
  1055.       CONFMAIL.LIST$ = HJ$
  1056.       RETURN
  1057. '
  1058. ' * PROCESS NAME OF UPLOAD DIRECTORY
  1059. '
  1060. 12730 CALL ASKRO("Name of upload directory (8 char. max)?",24,HJ$)
  1061.       IF LEN(HJ$) < 1 OR _
  1062.          LEN(HJ$) > 8 THEN _
  1063.          GOTO 12730
  1064.       CALL ALLCAPS (HJ$)
  1065.       UPLOAD.DIRECTORY$ = HJ$
  1066.       RETURN
  1067. '
  1068. ' * Get the File Management System Directory
  1069. '
  1070. 12740 CALL ASKRO("Name of File Management System (or NONE) directory (8 char. max)?",24,HJ$)
  1071.       IF LEN(HJ$) > 8 THEN _
  1072.          GOTO 12740
  1073.       CALL ALLCAPS (HJ$)
  1074.       FMS.DIRECTORY$ = HJ$
  1075.       IF FMS.DIRECTORY$ = "NONE" THEN _
  1076.          FMS.DIRECTORY$ = ""
  1077.       RETURN
  1078. 12750 CALL ASKRO("Name (prefix, optional extension) of Personal directory",24,HJ$)
  1079.       IF LEN(HJ$) < 1 OR _
  1080.          LEN(HJ$) > 12 OR INSTR(HJ$,".") > 9 THEN _
  1081.          GOTO 12750
  1082.       CALL ALLCAPS (HJ$)
  1083.       PERSONAL.DIR$ = HJ$
  1084.       IF INSTR(PERSONAL.DIR$,".") < 1 THEN _
  1085.          PERSONAL.DIR$ = PERSONAL.DIR$ + _
  1086.                          ".DEF"
  1087.       IF (INSTR(PERSONAL.DIR$,":") < 1) AND _
  1088.          (INSTR(PERSONAL.DIR$,"\") < 1) THEN _
  1089.          PERSONAL.DIR$ = PERSONAL.DRVPATH$+PERSONAL.DIR$
  1090.       RETURN
  1091. '
  1092. ' * GET THE SYSOP'S FIRST NAME
  1093. '
  1094. 12840 CALL ASKRO("What is the SYSOP's FIRST Name?",24,HJ$)
  1095.       IF LEN(HJ$) < 3 THEN _
  1096.          GOTO 12840
  1097.       CALL ALLCAPS (HJ$)
  1098.       SYSOP.FIRST.NAME$ = HJ$
  1099.       RETURN
  1100. 12850 CALL GETANSI (FG.1.DEF$," 1st")
  1101.       RETURN
  1102. 12860 CALL GETANSI (FG.2.DEF$," 2nd")
  1103.       RETURN
  1104. 12870 CALL GETANSI (FG.3.DEF$," 3rd")
  1105.       RETURN
  1106. 12880 CALL GETANSI (FG.4.DEF$," 4th")
  1107.       RETURN
  1108. 12890 CALL GETCOLOR("Caller's BACKGROUND color",CALLER.BKGRD)
  1109.       RETURN
  1110. '
  1111. ' * PROCESS THE SYSOP'S LAST NAME
  1112. '
  1113. 12910 CALL ASKRO("What is the SYSOP's LAST Name?",24,HJ$)
  1114.       IF LEN(HJ$) < 3 THEN _
  1115.          GOTO 12840
  1116.       CALL ALLCAPS (HJ$)
  1117.       SYSOP.LAST.NAME$ = HJ$
  1118.       RETURN
  1119. '
  1120. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY
  1121. '
  1122. 12980 CALL ASKRO("Secret first name that lets remote caller on as SYSOP is?",24,SYSOP.PASSWORD.1$)
  1123.       CALL ALLCAPS (SYSOP.PASSWORD.1$)
  1124.       IF SYSOP.PASSWORD.1$ = "" THEN _
  1125.          GOTO 12985
  1126.       MN1$ = SYSOP.PASSWORD.1$
  1127.       CALL ASKRO("Secret last name for remote SYSOP ([ENTER] disables)?",24,SYSOP.PASSWORD.2$)
  1128.       CALL ALLCAPS (SYSOP.PASSWORD.2$)
  1129.       IF SYSOP.PASSWORD.2$ = "" THEN _
  1130.          GOTO 12985
  1131.       MN2$ = SYSOP.PASSWORD.2$
  1132.       RETURN
  1133. 12985 MN1$ = "(Disabled)"
  1134.       MN2$ = ""
  1135.       SYSOP.PASSWORD.1$ = ""                                         ' KG072801
  1136.       SYSOP.PASSWORD.2$ = ""                                         ' KG072801
  1137.       RETURN
  1138. 12990 CALL GETNUMYN ("ESCAPE immediately lets on locally (NO=require name)",ESCAPE.INSECURE)
  1139.       RETURN
  1140. '
  1141. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM
  1142. '
  1143. 13000 CALL ASKRO ("Mail to caller to report on logon: A)ll, N)ew only, S)kip (none)",24,HJ$)
  1144.       IF LEN(HJ$) < 1 THEN _
  1145.          GOTO 13000
  1146.       LOGON.MAIL.LEVEL$ = LEFT$(HJ$,1)
  1147.       CALL ALLCAPS (LOGON.MAIL.LEVEL$)
  1148.       IF INSTR("ANS",LOGON.MAIL.LEVEL$) = 0 THEN _
  1149.          GOTO 13000
  1150.       RETURN
  1151. 13010 CALL ASKRO ("Exclude lines from msg display that begin with",24,SCREEN.OUT.MSG$)
  1152.       RETURN
  1153. 13030 IF BYPASS = 0 THEN _
  1154.          BYPASS$ = "Any user" : _
  1155.          RETURN
  1156.       IF BYPASS = 1 THEN _
  1157.          BYPASS$ = "All but new users" : _
  1158.          RETURN
  1159.       IF BYPASS = 2 THEN _
  1160.          BYPASS$ = "Only EXPERT users" : _
  1161.          RETURN
  1162.       IF I = 0 THEN _
  1163.          CALL GETINIT ("Specify the security level required to bypass messages. ",24,-32767,32767,X,CR) : _
  1164.          X$=STR$(X)
  1165.       BYPASS$ = "Security >" + _
  1166.                 STR$(VAL(X$)) + _
  1167.                 " users"
  1168.       RETURN
  1169. '
  1170. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME
  1171. '
  1172. 13131 CALL ASKRO("Enter name for this RBBS-PC (19 characters or less) ",24,HJ$)
  1173.       IF LEN(HJ$) > 19 THEN _
  1174.          GOTO 13131
  1175.       CALL ALLCAPS (HJ$)
  1176.       RBBS.NAME$ = HJ$
  1177.       RETURN
  1178. '
  1179. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE
  1180. '
  1181. 13140 CALL ASKRO("SYSOP's default sign-on mode (E)xpert, N)ovice)? ",24,HJ$)
  1182.       IF LEN(HJ$) = 6 OR _
  1183.          LEN(HJ$) = 1 THEN _
  1184.          GOTO 13170
  1185.       GOTO 13140
  1186. 13170 CALL ALLCAPS (HJ$)
  1187.       IF HJ$ = "E" OR _
  1188.          HJ$ = "EXPERT" THEN _
  1189.          EXPERT.USER$ = "EXPERT" : _
  1190.          RETURN
  1191.       IF HJ$ = "N" OR _
  1192.          HJ$ = "NOVICE" THEN _
  1193.          EXPERT.USER$ = "NOVICE" : _
  1194.          RETURN
  1195.       GOTO 13140
  1196. 13180 CALL CHKPERSDIR (PERSONAL.DIR$,MAX.DESC.LEN,PERSONAL.LEN)
  1197.       RETURN
  1198. '
  1199. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"
  1200. '
  1201. 13210 CALL GETINIT ("What is the earliest SYSOP wants to be paged? -- HHMM ",24,0,2359,START.OFFICE.HOURS,CR)
  1202.       IF CR THEN _
  1203.          GOTO 13210
  1204. 13216 CALL GETINIT ("What is the latest SYSOP wants to be paged? -- HHMM ",24,0,2359,END.OFFICE.HOURS,CR)
  1205.       IF CR THEN _
  1206.          GOTO 13216
  1207.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1208.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1209.       RETURN
  1210. '
  1211. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING
  1212. '
  1213. 13224 CALL GETYESNO ("Use on-line printer's bell to the page SYSOP?",M11$)
  1214.       RETURN
  1215. '
  1216. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING
  1217. '
  1218. 13228 A$ = ""
  1219.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1"
  1220. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  1221.       IF CR THEN _
  1222.          GOTO 13229
  1223.       IF REQUIRED.RINGS = 0 THEN _
  1224.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1" : _
  1225.          RETURN
  1226. 13233 CALL GETNUMYN ("Next call answered after" + _
  1227.              STR$(REQUIRED.RINGS) + _
  1228.              " rings. Do you want ringback?",AB)
  1229.       IF NOT AB THEN _
  1230.          GOTO 13237
  1231. 13235 IF REQUIRED.RINGS > 5 THEN _
  1232.          A$ = "(<6 for ringback)" : _
  1233.          GOTO 13229
  1234.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "255  "
  1235.       RETURN
  1236. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "254  "
  1237.       RETURN
  1238. 13238 CALL MMINTEGER ("Minimum baud required for NEW callers",0,32000,MIN.NEWCALLER.BAUD)
  1239.       RETURN
  1240. 13242 CALL MMINTEGER ("Minimum baud required for OLD callers",0,32000,MIN.OLDCALLER.BAUD)
  1241.       RETURN
  1242. 13249 CALL GETNUMYN ("Should RBBS-PC go off-line when DISK FULL occurs ",DISKFULL.GO.OFFLINE)
  1243.       RETURN
  1244. '
  1245. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE
  1246. '
  1247. 13253 CALL ASKRO ("Specify single drive in the range A->" + _
  1248.             M$ + _
  1249.             " for "+A$,24,HJ$)
  1250.       IF LEN(HJ$) <> 1 THEN _
  1251.          GOTO 13253
  1252.       CALL ALLCAPS (HJ$)
  1253.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1254.          GOTO 13253
  1255.       RETURN
  1256. '
  1257. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL
  1258. '
  1259. 13260 CALL GETYESNO ("Does your modem use the CTS signal for flow control",RTS$)
  1260.       RETURN
  1261. 13270 CALL MMINTEGER ("Seconds to wait for carrier after detecting a call",5,999,MAX.CARRIER.WAIT)
  1262.       RETURN
  1263. 13280 CALL MMINTEGER ("Wait how many minutes before recycling if no calls (0=forever)",0,32400,RECYCLE.WAIT)
  1264.       RETURN
  1265. 13285 CALL ASKRO ("What caller types is ECHOed by R)BBS, I)nter host, C)aller's pgm",24,DEFAULT.ECHOER$)
  1266.       IF LEN(DEFAULT.ECHOER$) < 1 THEN _
  1267.          GOTO 13285
  1268.       DEFAULT.ECHOER$ = LEFT$(DEFAULT.ECHOER$,1)
  1269.       CALL ALLCAPS (DEFAULT.ECHOER$)
  1270.       IF INSTR("ICR",DEFAULT.ECHOER$) < 1 THEN _
  1271.          GOTO 13285
  1272.       RETURN
  1273. 13290 A$ = "Leave modem at init baud rate Y)es, N)o, H)igh (above 2400)" ' WM042201
  1274.       CALL ASKRO (A$,24,HJ$)                                         ' WM042201
  1275.       IF LEN(HJ$) <> 1 THEN _                                        ' WM042201
  1276.          GOTO 13290                                                  ' WM042201
  1277.       CALL ALLCAPS (HJ$)                                             ' WM042201
  1278.       IF HJ$ = "Y" THEN _                                            ' WM042201
  1279.          KEEP.INIT.BAUD = -1 _                                       ' WM042201
  1280.       ELSE IF HJ$ = "N" THEN _                                       ' WM042201
  1281.          KEEP.INIT.BAUD = 0 _                                        ' WM042201
  1282.       ELSE IF HJ$ = "H" THEN _                                       ' WM042201
  1283.          KEEP.INIT.BAUD = 1 _                                        ' WM042201
  1284.       ELSE _                                                         ' WM042201
  1285.          GOTO 13290                                                  ' WM042201
  1286.       RETURN
  1287. 13295 CALL GETNUMYN ("Switch back comm settings if changed for up/down load",SWITCH.BACK)
  1288.       RETURN
  1289. 13310 CALL GETNUMYN ("Always respect XON/XOFF for flow control",XON.XOFF)
  1290.       RETURN
  1291. 13320 CALL GETNUMYN ("CONFIG.SYS includes an ANSI device driver",DOSANSI)
  1292.       RETURN
  1293. 13330 CALL MMINTEGER ("ASCII value for SMART TEXT control (0=NONE)",0,255,SMART.TEXT)
  1294.       RETURN
  1295. '
  1296. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED
  1297. '
  1298. 13470 CALL ASKRO ("Specify download drives (max of" + _
  1299.             STR$(MAXD) + _
  1300.             " in the range A-> " + M$ + "). ",24,HJ$)
  1301.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1302.          GOTO 13470
  1303.       CALL ALLCAPS (HJ$)
  1304.       FOR I = 1 TO LEN(HJ$)
  1305.          A$(I) = MID$(HJ$,I,1)
  1306.       NEXT
  1307.       FOR I = 1 TO LEN(HJ$)
  1308.          IF A$(I) < "A" OR A$(I) > M$ THEN _
  1309.             GOTO 13470
  1310.       NEXT
  1311.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1312.       IF DNLD.SUB < 1 THEN _
  1313.          RETURN
  1314.       FOR I = 1 TO DNLD.SUB
  1315.          IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1316.             DNLD$(I) = ""
  1317.       NEXT
  1318.       STOPIT = DNLD.SUB
  1319.       FOR I = 1 TO STOPIT
  1320.          IF DNLD$(I) <> "" THEN _
  1321.             GOTO 13583
  1322.          DNLD$(I) = DNLD$(I + 1)
  1323.          DNLD$(I + 1) = ""
  1324. 13583 NEXT
  1325.       DNLD.SUB = 0
  1326.       FOR I = 1 TO STOPIT
  1327.          IF DNLD$(I) <> "" THEN _
  1328.             DNLD.SUB = DNLD.SUB + 1
  1329.       NEXT
  1330.       RETURN
  1331. 13593 MAX = 3
  1332. 13599 CALL ASKRO (A$,24,HJ$)
  1333.       CALL ALLCAPS (HJ$)
  1334.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1335.          GOTO 13599
  1336.       I = 0
  1337.       GOSUB 25920
  1338.       IF I = 0 THEN _
  1339.          RETURN
  1340.       GOTO 13599
  1341. '
  1342. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?
  1343. '
  1344. 13750 CALL ASKRO ("Prompt bell default? (ON or OFF) ",24,PROMPT.BELL$)
  1345.       IF LEN(PROMPT.BELL$) < 1 OR _
  1346.          LEN(PROMPT.BELL$) > 3 THEN _
  1347.          GOTO 13750
  1348.       CALL ALLCAPS (PROMPT.BELL$)
  1349.       IF PROMPT.BELL$ = "ON"  THEN _
  1350.          RETURN
  1351.       IF PROMPT.BELL$ = "OFF" THEN _
  1352.          RETURN
  1353.       GOTO 13750
  1354. '
  1355. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)
  1356. '
  1357. 13840 CALL GETINIT ("Maximum minutes per session a user can stay on the system ",24,0,1440,MIN,CR)
  1358.       IF CR THEN _
  1359.          GOTO 13840
  1360.       MINUTES.PER.SESSION! = MIN
  1361.       RETURN
  1362. '
  1363. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED
  1364. '
  1365. 13890 J = 999
  1366.       IF NOT MESSAGES.CAN.GROW THEN _
  1367.          IF ((MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIUM.NUMBER.OF.NODES) / 5) < J THEN _
  1368.             J = (MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIMUM.NUMBER.OF.NODES) / 5
  1369.       CALL GETINIT ("Set maximum number of messages allowed (MAX = " + _
  1370.             STR$(FIX(J)) + _
  1371.             ")",24,1,999,MAX.ALLOWED.MSGS.FRM.DEF,CR)
  1372.       IF CR THEN _
  1373.          GOTO 13890
  1374.       IF MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1375.          GOTO 13929
  1376.       IF MESSAGES.CAN.GROW THEN _
  1377.          GOTO 13929
  1378.       CALL GETNUMYN ("Increase the " + _
  1379.                       MAIN.MESSAGE.FILE$ + _
  1380.                      " file to " + _
  1381.                        STR$((MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES) + _
  1382.                      " records?",AB)
  1383.       IF NOT AB THEN _
  1384.          GOTO 13890
  1385. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1386.       GOSUB 30450
  1387.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1388.       GOSUB 22080
  1389.       RETURN
  1390. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1391.       GOSUB 30450
  1392.       RETURN
  1393. 13940 CALL ANYINTEGER ("Set number of months before an inactive user is purged. ",ACT.MNTHS.B4.DELETING)
  1394.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1395.          GOTO 13940
  1396.       RETURN
  1397. 14120 COMMIN = 1
  1398.       COMMAX = 8
  1399.       CALL ANYINTEGER ("# of communication port to use (" + _
  1400.                    MID$(STR$(COMMIN),2) + _
  1401.                   "-" + _
  1402.                   MID$(STR$(COMMAX),2) + _
  1403.                   ", or 0 for LOCAL WORKSTATION)? ",X)
  1404.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1405.          GOTO 14120
  1406.       COM.PORT$ = "COM" + MID$(STR$(X),2)
  1407.       IF X = 0 THEN _
  1408.          LSB = 1016 : _
  1409.          RETURN
  1410. 14121 CALL GETNUMYN ("Use FOSSIL driver support",FOSSIL)
  1411.       IF FOSSIL THEN _
  1412.          GOTO 14125
  1413.       IF X < 3 THEN _
  1414.          GOTO 14123
  1415.       CALL GETNUMYN("BASIC does not support " + COM.PORT$ + ".  Do you wish to change it?",AB)
  1416.       IF AB THEN _
  1417.          GOTO 14120
  1418.       GOTO 14121
  1419. 14123 IF X = 1 THEN _
  1420.          LSB = 1016 _
  1421.       ELSE IF X = 2 THEN _
  1422.               LSB = 760
  1423.       IF PCJR THEN _
  1424.          LSB = 760
  1425.       RETURN
  1426. 14125 CALL ASKRO("Enter port address. i.e. 3F8? ",24,HJ$)
  1427.       IF LEN(HJ$) <> 3 THEN _
  1428.          GOTO 14125
  1429. 14130 CALL ALLCAPS (HJ$)
  1430.       B = 3
  1431.       GOSUB 14789
  1432.       IF A < 0 THEN _
  1433.          GOTO 14125
  1434.       LSB = A
  1435.       B = 2
  1436.       GOSUB 14789
  1437.       IF A < 0 THEN _
  1438.          GOTO 14125
  1439.       LSB = LSB + A * 16
  1440.       B = 1
  1441.       GOSUB 14789
  1442.       IF A < 0 THEN _
  1443.          GOTO 14125
  1444.       LSB = LSB + A * 256
  1445.       RETURN
  1446. 14789 A = INSTR("0123456789ABCDEF",MID$(HJ$,B,1)) - 1
  1447.       RETURN
  1448. '
  1449. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES
  1450. '
  1451. 14790 GOSUB 15200
  1452.       DRIVE.FOR.BULLETINS$ = HJ$
  1453.       GOSUB 14970
  1454.       BULLETIN.MENU$ = HJ$
  1455.       RETURN
  1456. '
  1457. ' *  PREFIX USED TO NAME BULLETIN FILES
  1458. '
  1459. 14800 GOSUB 14970
  1460.       IF LEN(HJ$) > 6 THEN _
  1461.          RETURN
  1462.       BULLETIN.PREFIX$ = HJ$
  1463.       RETURN
  1464. '
  1465. ' *  DRIVE AND PATH FOR THREE MAJOR 'HELP' FILES
  1466. '
  1467. 14810 GOSUB 15200
  1468.       HELP.PATH$ = HJ$
  1469.       RETURN
  1470. 14815 GOSUB 15200
  1471.       QUES.PATH$ = HJ$
  1472.       RETURN
  1473. '
  1474. ' *  PREFIX FOR FOR THREE MAJOR 'HELP' FILES
  1475. '
  1476. 14820 GOSUB 14970
  1477.       IF LEN(HJ$) > 7 THEN _
  1478.          RETURN
  1479.       HELP.FILE.PREFIX$ = HJ$
  1480.       RETURN
  1481. '
  1482. ' *  NAME OF 'NEWUSER' FILE
  1483. '
  1484. 14825 A$ = "File extension for help files (max 3 chars)"
  1485.       GOSUB 13593
  1486.       HELP.EXTENSION$ = HJ$
  1487.       RETURN
  1488. 14830 GOSUB 17340
  1489.       NEWUSER.FILE$ = HJ$
  1490.       RETURN
  1491. '
  1492. ' *  NAME OF 'WELCOME' FILE
  1493. '
  1494. 14840 GOSUB 17340
  1495.       WELCOME.FILE$ = HJ$
  1496.       RETURN
  1497. 14845 CALL ASKRO ("Extension for compressed files",24,HJ$)           ' KG052301
  1498.       IF LEN(HJ$) > 3 OR LEN(HJ$) < 1 THEN _
  1499.          GOTO 14845
  1500.       CALL ALLCAPS (HJ$)
  1501.       DEFAULT.EXTENSION$ = HJ$
  1502.       RETURN
  1503. '
  1504. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION
  1505. '
  1506. 14850 A$ = "Extension for RBBS directory files (3 char. max)."
  1507.       GOSUB 13593
  1508.       DIRECTORY.EXTENTION$ = HJ$
  1509.       RETURN
  1510. 14855 CALL ASKRO ("Alternate extension for RBBS directory files ",24,HJ$)
  1511.       IF LEN(HJ$) > 3 THEN _
  1512.          GOTO 14855
  1513.       CALL ALLCAPS (HJ$)
  1514.       ALTDIR.EXTENSION$ = HJ$
  1515.       RETURN
  1516. 14857 A$ = "PREFIX of name of directory of directories "
  1517.       MAX = 8
  1518.       GOSUB 13599
  1519.       DIRECTORY.PREFIX$ = HJ$
  1520.       RETURN
  1521. '
  1522. ' *  NAME OF THE SYSOP'S MENU
  1523. '
  1524. 14860 GOSUB 17340
  1525.       MENU$(1) = HJ$
  1526.       RETURN
  1527. '
  1528. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU
  1529. '
  1530. 14870 GOSUB 17340
  1531.       MENU$(2) = HJ$
  1532.       RETURN
  1533. '
  1534. ' *  NAME OF FILE SUBSECTION'S MENU
  1535. '
  1536. 14880 GOSUB 17340
  1537.       MENU$(3) = HJ$
  1538.       RETURN
  1539. '
  1540. ' *  NAME OF UTILITIES SUBSECTION'S MENU
  1541. '
  1542. 14890 GOSUB 17340
  1543.       MENU$(4) = HJ$
  1544.       RETURN
  1545. '
  1546. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE
  1547. '
  1548. 14900 GOSUB 17340
  1549.       CONFERENCE.MENU$ = HJ$
  1550.       RETURN
  1551. '
  1552. ' *  GET ANSWER MENU
  1553. '
  1554. 14905 GOSUB 17340
  1555.       ANS.MENU$ = HJ$
  1556.       RETURN
  1557. '
  1558. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES
  1559. '
  1560. 14910 GOSUB 17340
  1561.       TRASHCAN.FILE$ = HJ$
  1562.       RETURN
  1563. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1564.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1565.       CALL ALLCAPS (UPCAT.HELP$)
  1566.       RETURN
  1567. '
  1568. ' *  DRIVE AVAILABLE FOR UPLOADING
  1569. '
  1570. 14920 A$ = "uploading "
  1571.       GOSUB 13253
  1572.       DRIVE.FOR.UPLOADS$ = HJ$
  1573.       IF LEN(UPLOAD.SUBDIR$) > 1 THEN _
  1574.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1575.       RETURN
  1576. '
  1577. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG
  1578. '
  1579. 14970 X$ = OPTION$
  1580. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1581.       CALL ALLCAPS (HJ$)
  1582.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1583.          GOTO 14980
  1584.       L1 = INSTR(HJ$,".")
  1585.       IF L1 = 0 THEN _
  1586.          IF LEN(HJ$) < 9 THEN _
  1587.             GOTO 15045 ELSE _   7
  1588.       GOTO 14980
  1589.       IF L1 > 9 THEN _
  1590.          GOTO 14980
  1591.       IF L1 < 2 THEN _
  1592.          GOTO 14980
  1593.       IF LEN(HJ$) - L1 > 3 THEN _
  1594.          GOTO 14980
  1595. 15045 I = 0
  1596.       GOSUB 25920
  1597.       IF I = 0 THEN _
  1598.          RETURN
  1599.       GOTO 14980
  1600. '
  1601. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG
  1602. '
  1603. 15170 CALL ASKRO ("Specify drive in the range A->" + _
  1604.                    M$ + _
  1605.                   " for parameter " + _
  1606.                    X$ + _
  1607.                   ". ",24,HJ$)
  1608.       IF LEN(HJ$) <> 1 THEN _
  1609.          GOTO 15170
  1610.       CALL ALLCAPS (HJ$)
  1611.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1612.          GOTO 15170
  1613.       TB$ = HJ$
  1614.       RETURN
  1615. '
  1616. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH
  1617. '
  1618. 15200 X$ = "parameter " + OPTION$
  1619. 15205 CALL ASKRO ("Specify drive/path (A->" + M$ + ") for " + X$ + ".",24,HJ$)
  1620.       IF LEN(HJ$) < 1 THEN _
  1621.          GOTO 15205
  1622.       CALL ALLCAPS (HJ$)
  1623.       IF LEN(HJ$) = 1 THEN _
  1624.          HJ$ = HJ$ + ":"
  1625.       IF MID$(HJ$,2,1) = ":" THEN _
  1626.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN _
  1627.            GOTO 15205
  1628.       IF LEN(HJ$) > 2 THEN _
  1629.          IF MID$(HJ$,3,1) <> "\" THEN _
  1630.             GOTO 15205
  1631.       IF INSTR(HJ$,"\") > 0 THEN _
  1632.         IF RIGHT$(HJ$,1) <> "\" THEN _
  1633.            HJ$ = HJ$ + "\"
  1634.       STRNG$ = HJ$
  1635.       GOSUB 60470
  1636.       IF NOT IS.OK THEN _
  1637.          GOTO 15205
  1638.       TB$ = HJ$
  1639.       RETURN
  1640. 15230 RETURN
  1641. 15234 CALL ANYNUMBER ("Extend by what fraction of time uploading ",UPLOAD.TIME.FACTOR!)
  1642.       IF UPLOAD.TIME.FACTOR! <= 1.0 THEN _
  1643.          RETURN
  1644.       CLS
  1645.       LOCATE 10,1
  1646.       PRINT "     An upload time credit factor > 1 means that uploaders may get more"
  1647.       PRINT "     time credited than their total session time.   Such a credit normally"
  1648.       PRINT "     survives only for the day on which the upload is made."
  1649.       CALL GETNUMYN ("Make upload time credits survive forever until used",KEEP.TIME.CREDITS)
  1650.       RETURN
  1651. 15240 CALL MMINTEGER ("How many seconds of delay after modem initilization (1 to 99)?",1,99,MODEM.INIT.WAIT.TIME)
  1652.       RETURN
  1653. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (0 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME)
  1654.       RETURN
  1655. 15290 CALL MMINTEGER ("Enter number of active 'bulletins' (0 to 99)",0,99,ACTIVE.BULLETINS)
  1656.       RETURN
  1657. 15310 CALL ANYINTEGER ("Min security to read new PRIVATE messages",PRIVATE.READ.SEC)
  1658.       RETURN
  1659. 15320 CALL ANYINTEGER ("Min security to read new PUBLIC messages",PUBLIC.READ.SEC)
  1660.       RETURN
  1661. 15330 CALL ANYINTEGER ("Min security to change msg read security",SEC.CHANGE.MSG)
  1662.       RETURN
  1663. '
  1664. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE
  1665. '
  1666. 15460 GOSUB 17340
  1667.       MAIN.MESSAGE.FILE$ = HJ$
  1668.       MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
  1669.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1670.       RETURN
  1671. '
  1672. ' * DETERMINE THE NAME OF THE "CALLERS" FILE
  1673. '
  1674. 15461 GOSUB 15200
  1675.       CALL GETNUMYN ("Do you want a caller's activity to be logged to a file",X)
  1676.       IF NOT X THEN _
  1677.          CALLERS.FILE$ = TB$ : _
  1678.          RETURN
  1679.       GOSUB 14970
  1680.       CALLERS.FILE$ = TB$ + HJ$
  1681.       RETURN
  1682. '
  1683. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE
  1684. '
  1685. 15464 GOSUB 17340
  1686.       COMMENTS.FILE$ = HJ$
  1687.       RETURN
  1688. '
  1689. ' * DETERMINE THE NAME OF THE "USERS" FILE
  1690. '
  1691. 15500 GOSUB 17340
  1692.       MAIN.USER.FILE$ = HJ$
  1693.       MAINUSR$ = MAIN.USER.FILE$
  1694.       RETURN
  1695. 15530 CALL GETCOLOR ("Foreground",FG)
  1696.       CALL ASKRO ("Make foreground [N]ormal, or I)ntense (bright)",24,ANS$)
  1697.       CALL ALLCAPS (ANS$)
  1698.       IF LEFT$(ANS$,1) = "I" THEN _
  1699.          FG = FG + 8
  1700.       RETURN
  1701. 15590 CALL GETCOLOR ("Background",BG)
  1702.       RETURN
  1703. 15650 CALL GETCOLOR ("Border",BORDER)
  1704.       RETURN
  1705.  
  1706. '
  1707. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?
  1708. '
  1709. 15710 CLS
  1710.       GOSUB 15780
  1711.       A$ = "RBBS-PC to use modem commands you specified as follows:"
  1712.       IF M14$ = "YES" THEN _
  1713.          A$ ="RBBS-PC to use standard modem commands as follows:"
  1714.       PRINT A$
  1715.       PRINT ""
  1716.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1717.       PRINT ""
  1718.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1719.       PRINT "   Note: End item 2 with:"
  1720.       PRINT "     S0=1Q0X1 if answer on 0 rings"
  1721.       PRINT "     S0=254 if answer on >0 rings (no ring-back)"
  1722.       PRINT "     S0=255 if answer on >0 rings (with ring-back)"
  1723.       PRINT ""
  1724.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1725.       PRINT ""
  1726.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1727.       PRINT ""
  1728.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1729.       PRINT ""
  1730.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1731.       PRINT ""
  1732.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1733.       PRINT "   Note: End item 7 with:"
  1734.       PRINT "     Q1 if item 2 ends with S0=255"
  1735.       PRINT ""
  1736.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1737.       CALL GETINIT ("Specify command to change (1 to 8), CR to end, or 0 to reset to defaults)",24,0,8,I,CR)
  1738.       IF CR THEN _
  1739.          RETURN
  1740.       IF I <> 0 THEN _
  1741.          GOTO 15711
  1742.       GOSUB 15790
  1743.       GOTO 15710
  1744. 15711 CALL ASKRO ("Enter modem command for item" + _
  1745.                    STR$(I) + _
  1746.                   " :",24,HJ$)
  1747.       CALL ALLCAPS (HJ$)
  1748.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1749. 15712 USER.RESET.COMMAND$ = HJ$
  1750.       GOTO 15710
  1751. 15714 USER.INIT.COMMAND$ = HJ$
  1752.       GOTO 15710
  1753. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1754.       GOTO 15710
  1755. 15718 USER.ANSWER.COMMAND$ = HJ$
  1756.       GOTO 15710
  1757. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1758.       GOTO 15710
  1759. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1760.       GOTO 15710
  1761. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1762.       GOTO 15710
  1763. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1764.       GOTO 15710
  1765. 15780 M14$ = "NO"
  1766.       IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
  1767.          MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
  1768.          MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
  1769.          MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=") - 1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=") - 1)  AND _
  1770.          MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
  1771.          FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
  1772.          FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
  1773.          FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
  1774.          M14$ = "YES"
  1775.       RETURN
  1776. 15790 FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
  1777.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"
  1778.       FIRMWARE.WRITE.COMMAND$ = "&W"
  1779.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  1780.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  1781.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  1782.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$
  1783.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  1784.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  1785.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  1786.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  1787.       RETURN
  1788. 15800 CALL GETNUMYN ("Remind users of the messages they left?",MESSAGE.REMINDER)
  1789.       RETURN
  1790. 15820 CALL GETNUMYN ("Use machine language routines for speed",TURBO.RBBS)
  1791.       RETURN
  1792. 15825 CALL GETNUMYN ("Not BASIC = use DOS calls (need for local color graphics)",USE.BASIC.WRITES)
  1793.       RETURN
  1794. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1795.       RETURN
  1796. 15835 CALL GETNUMYN ("YES means to stop rather than scroll away previous text",MENUS.CAN.PAUSE)
  1797.       RETURN
  1798. 15840 CALL GETNUMYN ("Are system bulletins to be optional?",BULLETINS.OPTIONAL)
  1799.       RETURN
  1800. 15850 GOSUB 15200
  1801.       MACRO.DRVPATH$ = HJ$
  1802.       RETURN
  1803. 15860 CALL GETNUMYN ("Use macros",AB)                                ' KG060701
  1804.       IF NOT AB THEN _                                               ' KG060701
  1805.          MACRO.EXTENSION$ = "" : _                                   ' KG060701
  1806.          RETURN                                                      ' KG060701
  1807. 15862 A$ = "File extension for macro files (3 chars required)"       ' KG060701
  1808.       CALL ASKRO (A$,24,MACRO.EXTENSION$)                            ' KG060701
  1809.       IF LEN(MACRO.EXTENSION$) <> 3 THEN _                           ' KG060701
  1810.          GOTO 15862                                                  ' KG060701
  1811.       RETURN
  1812. 15880 CALL GETNUMYN ("Is non-ascii protocol required for binary files?",REQUIRE.NON.ASCII)
  1813.       RETURN                                                         ' KG072303
  1814. 15920 CALL GETYESNO ("Is " + _
  1815.                       DIRECTORY.EXTENTION$ + _
  1816.                       " omitted from the N)ew command?",OMIT.MAIN.DIRECTORY$)
  1817.       RETURN
  1818. 15991 CALL GETNUMYN ("Do you want EXTENDED logging to the 'callers' file",EXTENDED.LOGGING)
  1819.       RETURN
  1820. 15993 CALL GETNUMYN ("Do you want 'comments' recorded as private messages",COMMENTS.AS.MESSAGES)
  1821.       RETURN
  1822. 16000 CALL GETNUMYN ("Is system 'welcome' interruptable",WELCOME.INTERRUPTABLE)
  1823.       RETURN
  1824. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1825.       RETURN
  1826. 16032 CALL MMINTEGER ("Size of stack space to be set aside",1,32767,SIZE.OF.STACK)
  1827.       RETURN
  1828. 16033 CALL MMINTEGER ("Security level exempt from 'epi-log'",1,32767,SECURITY.EXEMPT.FROM.EPILOG)
  1829.       RETURN
  1830. '
  1831. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON
  1832. '
  1833. 16040 CLS
  1834.       LOCATE 5,5
  1835.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1836.       LOCATE 7,10
  1837.       PRINT "0.   IBM PC/XT/AT/PS2..."                               ' KG072302
  1838.       LOCATE 9,10
  1839.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1840.       LOCATE 11,10
  1841.       PRINT "2.   IBM PCjr
  1842.       LOCATE 13,10
  1843.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1844. 16050 CALL GETINIT ("Select environment (0 to 3, CR to end)",24,0,3,COMPUTER.TYPE,CR)
  1845.       IF CR THEN _
  1846.          RETURN
  1847. 16062 ON COMPUTER.TYPE+1 GOTO 16063,16064,16065,16066
  1848. 16063 COMPUTER.TYPE$ = "IBM PC/XT/AT/PS2..."                         ' KG072302
  1849.       RETURN
  1850. 16064 COMPUTER.TYPE$ = "Compaq/Plus"
  1851.       RETURN
  1852. 16065 COMPUTER.TYPE$ = "PCjr"
  1853.       GOTO 16071
  1854. 16066 COMPUTER.TYPE$ = "Other under PC-DOS"
  1855.       RETURN
  1856. 16071 CALL GETNUMYN ("Is an IBM PCjr Internal Modem installed? (YES or NO)",PCJR)
  1857.       IF PCJR THEN _
  1858.          LSB = 760
  1859. 16073 RETURN
  1860. 16121 CALL GETNUMYN ("Wait to issue modem commands between rings?",COMMANDS.BETWEEN.RINGS)
  1861.       RETURN
  1862. 16124 CALL MMREAL ("Enter baud rate (300,1200,2400,4800,9600,19200,38400) open modem at ",300!,38400!,B1!) ' KG090102
  1863.       IF B1! = 300 OR B1! = 1200 OR B1! = 2400 OR B1! = 4800 OR B1! = 9600 OR _ ' KG090102
  1864.          B1! = 19200 OR B1! = 38400 THEN _                           ' KG090102
  1865.             GOTO 16128 _
  1866.       ELSE GOTO 16124
  1867. 16128 MODEM.INIT.BAUD$ = MID$(STR$(B1!),2)                           ' KG090102
  1868.       RETURN
  1869. '
  1870. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'
  1871. '
  1872. 16130 GOSUB 17340
  1873.       MENU$(5) = HJ$
  1874.       RETURN
  1875. '
  1876. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'
  1877. '
  1878. 16140 GOSUB 17340
  1879.       RCTTY.BAT$ = HJ$
  1880.       RETURN
  1881. '
  1882. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'
  1883. '
  1884. 16150 GOSUB 17340
  1885.       RBBS.BAT$ = HJ$
  1886.       RETURN
  1887. '
  1888. ' * DRIVE/PATH TO LOOK FOR 'COMMAND.COM' ON
  1889. '
  1890. 16160 GOSUB 15200
  1891.       DISK.FOR.DOS$ = HJ$
  1892.       RETURN
  1893. 16170 CALL GETNUMYN ("Redirect I/O via the CTTY command on dropping to DOS?",REDIRECT.IO.METHOD)
  1894. 16175 CALL GETNUMYN ("Redirect I/O via a device named in CONFIG.SYS?",B1)
  1895.       IF B1 THEN _
  1896.          GOTO 16176
  1897.       USE.DEVICE.DRIVER$ = ""
  1898.       RETURN
  1899. 16176 IF LEN (USE.DEVICE.DRIVER$) > 0 THEN _
  1900.          GOTO 16177
  1901.       CALL ASKRO("Enter name of the device to use. ",24,USE.DEVICE.DRIVER$)
  1902.       IF LEN (USE.DEVICE.DRIVER$) > 8 THEN _
  1903.          GOTO 16176
  1904.       IF LEN (USE.DEVICE.DRIVER$) = 0 THEN _
  1905.          RETURN
  1906. 16177 CALL GETNUMYN ("Use the device named " + USE.DEVICE.DRIVER$ + "?",B1)
  1907.       IF B1 THEN _
  1908.          RETURN
  1909.       USE.DEVICE.DRIVER$ = ""
  1910.       GOTO 16176
  1911. 16290 CALL GETNUMYN ("Is the 'door' subsystem available?",DOORS.AVAILABLE)
  1912.       IF NOT DOORS.AVAILABLE THEN _
  1913.          RETURN
  1914.       CALL GETNUMYN ("Will you be running RBBS-PC under MultiLink? ",AB)
  1915.       IF AB THEN _
  1916.          GOTO 16350
  1917. 16340 DELAY! = FNTI! + 15
  1918. '
  1919. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"
  1920. '
  1921.       CLS
  1922.       PRINT "                ******Warning******"
  1923.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1924.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1925.       PRINT "communication port!  Otherwise your system will be vulnerable" ' KG060704
  1926.       PRINT "to being hung -- and worse!!!   Be wary of using doors if" ' KG060704
  1927.       PRINT "don't THROUGHLY understand the doors section in RBBS-PC's" ' KG060704
  1928.       PRINT "documentation and the pitfalls of using 'doors'!"       ' KG060704
  1929. 16345 GOSUB 60440
  1930.       CLS
  1931.       PRINT "                ******Warning******"
  1932.       PRINT "Some environments require that you set the modem to answer"
  1933.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1934.       PRINT "using doors because if a user in a door gets disconnected"
  1935.       PRINT "the modem is set to answer on the very next ring and someone who"
  1936.       PRINT "you may not want in the door or in DOS will find themselves"
  1937.       PRINT "able to do you grevious harm, though some environments and" ' KG060704
  1938.       PRINT "modems work fine."                                      ' KG060704
  1939.       PRINT ""                                                       ' KG060704
  1940.       CALL GETNUMYN ("Are you sure you want to use doors",SHOOT.YOURSELF) ' KG060704
  1941.       RETURN
  1942. 16350 CLS
  1943. 16360 LOCATE 23,1
  1944.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  1945. 16370 CALL MMINTEGER ("Enter Multi-Link terminal type for DOORS ",0,12,DOORS.TERMINAL.TYPE)
  1946.       RETURN
  1947. 16650 CALL ANYINTEGER ("MAX # of minutes per day (0 = no limit)",MAX.PER.DAY)
  1948.       RETURN
  1949. 16690 CALL GETNUMYN ("Remind users of # uploads and downloads?",REMIND.FILE.TRANSFERS)
  1950.       RETURN
  1951. 16722 CALL GETNUMYN ("Remind users of their terminal's profile?",REMIND.PROFILE)
  1952.       RETURN
  1953. 16725 CALL GETNUMYN ("Are you using a non-Hayes auto-answer only modem?",DUMB.MODEM)
  1954.       RETURN
  1955. 16730 CALL MMINTEGER ("Default user page length?(a value between 0 and 255)",0,255,PAGE.LENGTH)
  1956.       RETURN
  1957. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  1958.       RETURN
  1959. 16795 CALL MMINTEGER ("Max. # of lines allowed in extended upload description (0-99)",0,99,MAX.EXTENDED.LINES)
  1960.       RETURN
  1961. 17160 CALL ANYINTEGER ("Security level for parameter " + _
  1962.                         HJ$ + _
  1963.                        " is? ",MINIMUM.LOGON.SECURITY)
  1964.       RETURN
  1965. 17170 CALL ANYINTEGER ("Security level for parameter " + _
  1966.                         HJ$ + _
  1967.                        " is? ",DEFAULT.SECURITY.LEVEL)
  1968.       RETURN
  1969. 17180 CALL ANYINTEGER ("Security level for parameter " + _
  1970.                         HJ$ + _
  1971.                        " is? ",SYSOP.SECURITY.LEVEL )
  1972.       RETURN
  1973. '
  1974. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY
  1975. '
  1976. 17190 GOSUB 17340
  1977.       FILESEC.FILE$ = HJ$
  1978.       RETURN
  1979. 17200 CALL ANYINTEGER ("Security level for parameter " + _
  1980.                         HJ$ + _
  1981.                        " is? ",SYSOP.MENU.SECURITY.LEVEL)
  1982.       RETURN
  1983. 17210 CALL ANYINTEGER ("MIN security required to add extended upload description",ASK.EXTENDED.DESC)
  1984.       RETURN
  1985. 17215 CALL ANYINTEGER ("Registration door applies to new users & whose security <=",MAX.REG.SEC)
  1986.       RETURN
  1987. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  1988.       RETURN
  1989. 17230 CALL SECURE ("SYSOP",SYSOP.COMMANDS.DEFAULTS$,NUM.SYSOP,SYSOP.FUNCTION$(),SYSOP.FUNCTION(),SYSOP.COMMANDS$)
  1990.       RETURN
  1991. 17240 CALL SECURE ("Main Menu",MAIN.COMMANDS.DEFAULTS$,NUM.MAIN,MAIN.FUNCTION$(),MAIN.FUNCTION(),MAIN.COMMANDS$)
  1992.       RETURN
  1993. 17250 CALL SECURE ("File Menu",FILE.COMMANDS.DEFAULTS$,NUM.FILES,FILES.FUNCTION$(),FILES.FUNCTION(),FILE.COMMANDS$)
  1994.       RETURN
  1995. 17260 CALL SECURE ("Utilities",UTIL.COMMANDS.DEFAULTS$,NUM.UTILITY,UTILITY.FUNCTION$(),UTILITY.FUNCTION(),UTIL.COMMANDS$)
  1996.       RETURN
  1997. 17264 CALL SECURE ("Global",GLOBAL.COMMANDS.DEFAULTS$,NUM.GLOBAL,GLOBAL.FUNCTION$(),GLOBAL.FUNCTION(),GLOBAL.COMMANDS$)
  1998.       RETURN
  1999. '
  2000. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES
  2001. '
  2002. 17270 GOSUB 17340
  2003.       PASSWORD.FILE$ = HJ$
  2004.       RETURN
  2005. 17280 CALL ASKRO("Name of file shown for security breaches",24,HJ$)
  2006.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  2007.          GOTO 17280
  2008.       IF LEN(HJ$) < 1 THEN _
  2009.          SECVIO.HLP$ = NONE.PICKED$ : _
  2010.          RETURN
  2011.       CALL ALLCAPS (HJ$)
  2012.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  2013.       RETURN
  2014. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2015.       RETURN
  2016. 17300 CALL ANYINTEGER ("Security level for parameter " + _
  2017.                         HJ$ + _
  2018.                        " is? ",MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  2019.       RETURN
  2020. 17310 CALL ANYINTEGER ("Security level for overwriting files on upload is? ",OVERWRITE.SECURITY.LEVEL)
  2021.       RETURN
  2022. 17316 CALL ANYINTEGER ("Security level for parameter " + _
  2023.                         HJ$ + _
  2024.                        " is? ",SEC.LVL.EXEMPT.FRM.PURGING)
  2025.       RETURN
  2026. '
  2027. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION
  2028. '
  2029. 17340 GOSUB 15200
  2030.       GOSUB 14970
  2031.       IF IPAGE = 6 AND ILOOKUP = 9 AND HJ$ = "NONE" THEN _
  2032.       IF MID$(HJ$,2,1) <> ":" THEN _
  2033.          BEEP : _
  2034.          GOTO 17340
  2035.       IF HJ$ = "NONE" THEN _
  2036.          RETURN
  2037.       HJ$ = TB$ + HJ$
  2038.       RETURN
  2039. 17500 CALL GETNUMYN ("Show section in command prompt",SHOW.SECTION)
  2040.       RETURN
  2041. 17550 CALL GETNUMYN ("Show commands in command prompt",COMMANDS.IN.PROMPT)
  2042.       RETURN
  2043. 17560 CALL GETNUMYN ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS)
  2044.       RETURN
  2045. 17570 CALL GETNUMYN ("Add new users to USERS file",REMEMBER.NEW.USERS)
  2046.       RETURN
  2047. 17580 CALL GETNUMYN ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM)
  2048.       RETURN
  2049. 17590 CALL GETNUMYN ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS)
  2050.       RETURN
  2051. 17600 CALL GETNUMYN ("Enable download of new files at logon",NEW.FILES.CHECK)
  2052.       RETURN
  2053. 17610 CALL GETNUMYN ("Turn printer off after each recycle",TURN.PRINTER.OFF)
  2054.       RETURN
  2055. 17620 CALL GETNUMYN ("Play music themes for RBBS functions",MUSIC)
  2056.       RETURN
  2057. 17625 CALL GETNUMYN ("Use order on directory of directories (no=sort)",USE.DIR.ORDER)
  2058.       RETURN
  2059. 17630 CALL GETNUMYN ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE)
  2060.       RETURN
  2061. 17635 CALL ANYINTEGER ("Security that lets caller READ & KILL all messages",SEC.KILL.ANY)
  2062.       RETURN
  2063. 17640 CALL ANYINTEGER ("Adopt change in main security for all users with sec <",AUTO.UPGRADE.SEC)
  2064.       RETURN
  2065. 17645 CALL GETNUMYN ("Send multi-file ASCII download as one big file",PERSONAL.CONCAT)
  2066.       RETURN
  2067. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2068.       RETURN
  2069. 17700 CALL GETNUMYN ("Require all callers to answer a questionnaire",AB)
  2070.       IF NOT AB THEN _
  2071.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2072.          RETURN
  2073.       GOSUB 17340
  2074.       GOSUB 17740
  2075.       REQUIRED.QUESTIONNAIRE$ = HJ$
  2076.       RETURN
  2077. 17710 GOSUB 17340
  2078.       PRELOG$ = HJ$
  2079.       RETURN
  2080. 17720 CALL GETNUMYN ("Require all NEW users to answer a questionnaire",AB)
  2081.       IF NOT AB THEN _
  2082.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2083.          RETURN
  2084.       GOSUB 17340
  2085.       GOSUB 17740
  2086.       NEW.USER.QUESTIONNAIRE$ = HJ$
  2087.       RETURN
  2088. 17725 GOSUB 17340
  2089.       GOSUB 17740
  2090.       AUTOPAGE.DEF$ = HJ$
  2091.       RETURN
  2092. 17730 GOSUB 17340
  2093.       GOSUB 17740
  2094.       EPILOG$ = HJ$
  2095.       RETURN
  2096. 17740 IF INSTR(HJ$,".") = 0 THEN _
  2097.          HJ$ = HJ$ + ".DEF"
  2098.       RETURN
  2099. 17800 CALL MMINTEGER ("Match personal downloads starting at what column in user record",1,128,PERSONAL.BEGIN)
  2100.       RETURN
  2101. 17805 OK = TRUE
  2102.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2103.          RETURN
  2104.       IF START.WRITE > 100 THEN _
  2105.          RETURN
  2106.       IF START.WRITE < 82 AND _
  2107.          START.WRITE + LEN.WRITE < 82 THEN _
  2108.          RETURN
  2109.       OK = FALSE
  2110. 17806 CALL ASKRO ("Parameter 47 precludes using this part of USERS record. [ENTER] continues",24,A$)
  2111.       RETURN
  2112. 17810 CALL MMINTEGER ("Match personal downloads using how many chars in user record",1,128,PERSONAL.LEN)
  2113.       RETURN
  2114. 17820 CALL ASKRO ("Protocol for personal downloads [ENTER] for none)",24,PERSONAL.PROTOCOL$)
  2115.       IF LEN(PERSONAL.PROTOCOL$) > 1 THEN _
  2116.          GOTO 17820
  2117.       IF PERSONAL.PROTOCOL$ = "" THEN _
  2118.          PERSONAL.PROTOCOL$ = "N"
  2119.       CALL ALLCAPS (PERSONAL.PROTOCOL$)
  2120.       RETURN
  2121. 17830 CALL ASKRO ("Prompt for first field caller asked (What is your..)",24,FIRST.NAME.PROMPT$)
  2122.       RETURN
  2123. 17840 CALL ASKRO ("Prompt for second field caller asked (What is your..)",24,LAST.NAME.PROMPT$)
  2124.       RETURN
  2125. 17845 CALL ASKRO ("Ask callers for [e.g. CITY/STATE] (What is your...)",24,USER.LOCATION$)
  2126.       RETURN
  2127. 17850 CALL GETNUMYN ("Enforce upload/download ratios",ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  2128.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2129.          RETURN
  2130.       IF START.INDIV > 100 THEN _
  2131.          RETURN
  2132.       IF START.INDIV < 82 AND _
  2133.          START.INDIV + LEN.INDIV < 82 THEN _
  2134.          RETURN
  2135.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  2136.       GOTO 17806
  2137. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2138.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2139. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2140.         BEEP : _
  2141.         GOTO 18000
  2142.       IF START.HASH = 1 THEN _
  2143.          HASH.ID$ = "(NAME)"_
  2144.       ELSE HASH.ID$ = "(nonstandard)"
  2145.       START.WRITE = START.HASH
  2146.       LEN.WRITE = LEN.HASH
  2147.       GOSUB 17805
  2148.       IF NOT OK THEN _
  2149.          START.HASH = 1 : _
  2150.          LEN.HASH = 31 : _
  2151.          GOTO 18002
  2152.       RETURN
  2153. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2154.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2155. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2156.         INDIV.ID$ = NONE.PICKED$ _
  2157.       ELSE INDIV.ID$ = "(nonstandard)"
  2158.       START.WRITE = START.INDIV
  2159.       START.LEN = LEN.INDIV
  2160.       GOSUB 17805
  2161.       IF NOT OK THEN _
  2162.          START.INDIV = 0 : _
  2163.          LEN.INDIV = 31 : _
  2164.          GOTO 18102
  2165.       START.WRITE = START.INDIV
  2166.       RETURN
  2167. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2168.       CALL ALLCAPS (DEFAULT.CATEGORY.CODE$)
  2169.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2170.          DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2171.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2172.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2173.       RETURN
  2174. 18300 GOSUB 15200
  2175.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2176.       DIR.CATEGORY.FILE$ = TB$ + _
  2177.                            DIR.CATEGORY.FILE$
  2178.       RETURN
  2179. 18310 GOSUB 17340
  2180.       MAIN.PUI$ = HJ$
  2181.       CALL BRKFNAME (MAIN.PUI$,X1$,X2$,X3$,TRUE)
  2182.       IF X3$ = "" THEN _
  2183.          MAIN.PUI$ = X1$ + X2$ + ".PUI"
  2184.       RETURN
  2185. 18330 CALL GETNUMYN ("Should DOORS be TIME-LOCKED",TIME.LOCK)
  2186.       CALL GETNUMYN ("Should DOWNLOADS be TIME-LOCKED",Q)
  2187.       TIME.LOCK = -TIME.LOCK + 2 * -Q
  2188.       RETURN
  2189. 18340 CALL ANYINTEGER ("MINIMUM security for turbo logon",ALLOW.CALLER.TURBO)
  2190.       RETURN
  2191. 18345 CALL ANYINTEGER ("MINIMUM security to add dir entry for pre-existing file",ADD.DIR.SECURITY)
  2192.       RETURN
  2193. 18350 CALL ASKRO ("Copy upload description to upload dir AND to (Drv/path/name)",24,ALWAYS.STREW.TO$)
  2194.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2195.       RETURN
  2196. 18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
  2197.       CALL ALLCAPS (MASTER.DIRECTORY.NAME$)
  2198.       RETURN
  2199. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2200.       RETURN
  2201. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2202.       RETURN
  2203. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2204.       RETURN
  2205. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2206.       RETURN
  2207. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2208.       RETURN
  2209. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2210.       RETURN
  2211. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2212.       RETURN
  2213. 18545 IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  2214.          XX$ = "Parameter " + _
  2215.             OPTION$ + _
  2216.             " only valid during CONFERENCE maintenence!" : _
  2217.          GOSUB 50345 : _
  2218.          DELAY! = FNTI! + 5 : _
  2219.          GOSUB 60440 : _
  2220.          RETURN
  2221.       CALL ANYINTEGER ("Minimum security level to 'AUTO ADD' to conference",AUTO.ADD.SECURITY)
  2222.       AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  2223.       RETURN
  2224. '
  2225. ' *  GET UPLOAD DIRECTORY DRIVE/PATH
  2226. '
  2227. 18550 GOSUB 15200
  2228.       UPLOAD.PATH$ = HJ$
  2229.       RETURN
  2230. 18600 GOSUB 15200
  2231.       DIRECTORY.PATH$ = HJ$
  2232.       RETURN
  2233. 18620 GOSUB 17340
  2234.       PROTO.DEF$ = HJ$
  2235.       RETURN
  2236. 18625 GOSUB 17340
  2237.       DOORS.DEF$ = HJ$
  2238.       RETURN
  2239. 18630 GOSUB 15200
  2240.       IF INSTR(PERSONAL.DIR$, PERSONAL.DRVPATH$) = 1 THEN _
  2241.          PERSONAL.DIR$ = HJ$ + MID$(PERSONAL.DIR$, LEN(PERSONAL.DRVPATH$)+1)
  2242.       PERSONAL.DRVPATH$ = HJ$
  2243.       RETURN
  2244. 18640 CALL GETNUMYN ("Is there an external DOOR to check Callers",AB)
  2245.       IF NOT AB THEN _
  2246.          REGISTRATION.PROGRAM$ = NONE.PICKED$ : _
  2247.          RETURN
  2248.       GOSUB 17340
  2249.       REGISTRATION.PROGRAM$ = HJ$
  2250.       RETURN
  2251. 18700 CALL GETNUMYN ("Set most critical parameters",AB)
  2252.       IF NOT AB THEN _
  2253.          RETURN
  2254.       HJ$ = CHR$(13)
  2255. '
  2256. ' * SET THE MOST CRITICAL PARAMETERS
  2257. ' *  12 = name of board
  2258. ' *  29 = type pc
  2259. ' * 162 = environment
  2260. ' * 161 = max # nodes
  2261. ' * 123 = min sec logon
  2262. ' * 124 = default security
  2263. ' *   8 = max sess time
  2264. ' *   9 = max day time
  2265. ' * 221 = comm port
  2266. ' * 224 = ring to answer
  2267. ' * 228 = baud rate
  2268. ' * 121 = remote sysop name
  2269. '
  2270.      KSTACKED$ =   "8" + HJ$ +   "9" + HJ$ + _
  2271.                   "12" + HJ$ +  "29" + HJ$ + _
  2272.                  "121" + HJ$ + "123" + HJ$
  2273.      KSTACKED$ = KSTACKED$ + _
  2274.                  "124" + HJ$ + "161" + HJ$ + _
  2275.                  "162" + HJ$ + "221" + HJ$ + _
  2276.                  "224" + HJ$ + "228" + HJ$
  2277.      IX = 1
  2278.      RETURN
  2279. 18800 CALL GETNUMYN ("Set the Parameters new in " + CONFIG.VERSION$,AB)
  2280.       IF NOT AB THEN _
  2281.          RETURN
  2282.       HJ$ = CHR$(13)
  2283. '
  2284. ' * SET THE PARAMETERS NEW TO THIS RELEASE OF RBBS-PC
  2285. ' *  60 = Speech synthesizer
  2286. ' * 108 = Who subject to logon door
  2287. ' * 109 = Doors control file
  2288. ' * 156 = Auto alter security in conference
  2289. ' * 157 = Sec to read/kill all messages
  2290. ' * 158 = Screen msg lines
  2291. ' * 168 = Default extension compressed files
  2292. '
  2293.       KSTACKED$ =    "60" + HJ$ + "108" + HJ$ + "109" + HJ$ + "156" + HJ$ + _
  2294.                     "157" + HJ$ + "158" + HJ$
  2295.       KSTACKED$ = KSTACKED$ + _
  2296.                     "168" + HJ$ + "END"
  2297.       IPAGE = 1
  2298.       RETURN
  2299. '
  2300. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE
  2301. '
  2302. 19189 IF CONFERENCE.MODE = 2 THEN _
  2303.          GOSUB 22560 : _
  2304.          RETURN
  2305.       GOSUB 22100
  2306.       RETURN
  2307. '
  2308. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR
  2309. '
  2310. 20000 LOCATE 18,1
  2311.       PRINT "NOTE:  PC-SIG believes that it is illegal to charge users for"
  2312.       PRINT "       downloading from the PC-SIG Library on a per download"
  2313.       PRINT "       basis.  Subscription fees of a reasonable nature are"
  2314.       PRINT "       acceptable."
  2315.       A$ = "Specify Library disk in the range A->" + M$ + "(or NONE) "
  2316.       MAX = 4
  2317.       GOSUB 13599
  2318.       LIBRARY.DRIVE$ = HJ$
  2319.       IF LEN(HJ$) > 1 AND HJ$ <> "NONE" THEN _
  2320.          GOTO 20000
  2321.       IF LIBRARY.DRIVE$ = "NONE" THEN _
  2322.          LIBRARY.DRIVE$ = "" _
  2323.       ELSE LIBRARY.DRIVE$ = LIBRARY.DRIVE$ + ":"
  2324.       RETURN
  2325. '
  2326. ' * LIBRARY DIRECTORY/PATH
  2327. '
  2328. 20010 GOSUB 15200
  2329.       LIBRARY.DIRECTORY.PATH$ = HJ$
  2330.       RETURN
  2331. ' *  PKZIP Drive/Path
  2332. '
  2333. 20018 A$ = "Name of Drive and SubDir For PKXARC "
  2334.       GOSUB 15200
  2335.    '   PKDRV = LEN(HJ$)-1
  2336.    '   HJ$ = LEFT$(HJ$,PKDRV)
  2337.       ARKVIEW.PATH$ = HJ$
  2338.       RETURN
  2339. '
  2340. ' *  NAME OF 'LIBRARY DIRECTORY' FILE'S EXTENSION
  2341. '
  2342. 20020 A$ = "Name of Library directory extension "
  2343.       GOSUB 13593
  2344.       LIBRARY.DIRECTORY.EXTENTION$ = HJ$
  2345.       RETURN
  2346. '
  2347. ' * LIBRARY WORKING DISK
  2348. '
  2349. 20030 GOSUB 15200
  2350.       LIBRARY.WORK.DISK.PATH$ = HJ$
  2351.       RETURN
  2352. 20040 CALL MMINTEGER ("Max number of disks on Library (1-9999)",1,9999,LIBRARY.MAX.DISK)
  2353.       RETURN
  2354. 20050 CALL MMINTEGER ("Max number of directories on Library (1-999)",1,999,LIBRARY.MAX.DIRECTORY)
  2355.       RETURN
  2356. 20060 CALL MMINTEGER ("Number of subdirectories for each master (1-999)",1,999,LIBRARY.MAX.SUBDIR)
  2357.       RETURN
  2358. '
  2359. ' * PREFIX OF LIBRARY SUBDIRECTORY
  2360. '
  2361. 20070 A$ = "Prefix name of Library subdirectories in each master "
  2362.       MAX = 4
  2363.       GOSUB 13599
  2364.       LIBRARY.SUBDIR.PREFIX$ = HJ$
  2365.       RETURN
  2366. '
  2367. ' *  NAME OF FILE SUBSECTION'S MENU
  2368. '
  2369. 20080 GOSUB 17340
  2370.       MENU$(6) = HJ$
  2371.       RETURN
  2372. '
  2373. ' *  ASSIGN SECURITY LEVELS TO THE LIBRARY MENU'S COMMANDS
  2374. '
  2375. 20090 CALL SECURE ("LIBRARY",LIBRARY.COMMANDS.DEFAULTS$,NUM.LIBRARY,LIBRARY.FUNCTION$(),LIBRARY.FUNCTION(),LIBRARY.COMMANDS$)
  2376.       RETURN
  2377. '
  2378. ' * DRIVE/PATH FOR ARCHIVE UTILITY
  2379. '
  2380. 20100 GOSUB 15200
  2381.       LIBRARY.ARCHIVE.PATH$ = HJ$
  2382.       RETURN
  2383. '
  2384. ' * PROCESS NAME OF ARCHIVE UTILITY
  2385. '
  2386. 20110 CALL ASKRO ("Name of Archive utility ",24,HJ$)
  2387.       CALL ALLCAPS (HJ$)
  2388.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2389.          GOTO 20110
  2390.       LIBRARY.ARCHIVE.PROGRAM$ = HJ$
  2391.       CALL ASKRO ("Archive command ",24,HJ$)
  2392.       CALL ALLCAPS (HJ$)
  2393.       IF LEN(HJ$) > 8 THEN _
  2394.          GOTO 20110
  2395.       LIBRARY.ARCHIVE.PROGRAM$ = LIBRARY.ARCHIVE.PROGRAM$ + _
  2396.                                  " " + _
  2397.                                  HJ$
  2398.       RETURN
  2399. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2400.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2401.          RETURN
  2402.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2403.       GOSUB 30610
  2404.       RETURN
  2405. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (32-4096)",32,4096,BUFFER.SIZE)
  2406.       RETURN
  2407. 21770 CALL MMINTEGER ("Size of internal BUFFER for Uploads (128-8192)",128,8192,WRITE.BUF.DEF)
  2408.       RETURN
  2409. 21780 CALL MMINTEGER ("Max # of work variables in questionnaire/macros (13-99)",13,99,MAX.WORK.VAR)
  2410.       RETURN
  2411. '
  2412. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN
  2413. '
  2414. 21810 SUBROUTINE.PARAMETER = 1
  2415. 21820 CALL NETTYPE
  2416.       RETURN
  2417. 21895 SUBROUTINE.PARAMETER = 2
  2418.       GOTO 21820
  2419. '
  2420. ' * IDENTIFY THE VOICE SYNTHESIZER TYPES THAT RBBS-PC CAN SUPPORT
  2421. '
  2422. 21900 SUBROUTINE.PARAMETER = 1
  2423. 21903 CALL VOICETYPE
  2424.       RETURN
  2425. 21905 SUBROUTINE.PARAMETER = 2
  2426.       GOTO 21903
  2427. '
  2428. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE
  2429. '
  2430. 21910 IF CONFERENCE.MODE = 2 THEN _
  2431.          GOSUB 22560 : _
  2432.          RETURN
  2433.       GOSUB 22100
  2434.       RETURN
  2435. '
  2436. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF
  2437. '
  2438. 21950 CALL ASKRO ("How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? ",24,HJ$)
  2439.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2440.          GOTO 21950
  2441.       CALL ALLCAPS (HJ$)
  2442.       IF LEFT$(HJ$,1) = "S" THEN _
  2443.          HJ$ = "SYSTEM" : _
  2444.          RECYCLE.TO.DOS = 1 : _
  2445.          GOTO 22020
  2446.       IF LEFT$(HJ$,1) = "I" THEN _
  2447.          HJ$ = "INTERNAL" : _
  2448.          RECYCLE.TO.DOS = 0 : _
  2449.          GOTO 22020
  2450.       GOTO 21950
  2451. 22020 RECYCLE.TO.DOS$ = HJ$
  2452.       RETURN
  2453. 22030 IF NETWORK.TYPE = 2 THEN _
  2454.          CALL ASKRO ("OMNI-NET cannot let message file grow.  Press [Enter] to continue",24,HJ$) : _
  2455.          RETURN
  2456.       CALL GETNUMYN ("Message file GROWS rather than FIXED in size",MESSAGES.CAN.GROW)
  2457.       RETURN
  2458. '
  2459. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE
  2460. '
  2461. 22040 CALL ANYNUMBER ("Max. records in preformatted " + _
  2462.                        MAIN.MESSAGE.FILE$ + _
  2463.                       " file (>" + _
  2464.                        STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):",B3!)
  2465.       IF B3! <= (5 * MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2466.          B3! > 9999999! THEN _
  2467.          GOTO 22040
  2468. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2469.       GOSUB 30610
  2470.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2471.       RETURN
  2472. '
  2473. ' * BUILD THE USERS FILE TO SUIT
  2474. '
  2475. 22100 FF = CURRENT.USER.COUNT
  2476.       IF FF > 1 THEN _
  2477.          FF = FF - 1
  2478.       CALL ANYINTEGER (STR$(FF) + _
  2479.                        " of" + _
  2480.                        STR$(HIGHEST.USER.RECORD) + _
  2481.                        " records used. Enter new max # of records for " + _
  2482.                        MAIN.USER.FILE$ + _
  2483.                        ":",B1)
  2484. 22120 IF B1 < 1 OR B1 > 99999! OR _
  2485.          B1 < FF THEN _
  2486.          GOTO 22100
  2487. 22140 B2 = 2
  2488.       WHILE B2 < B1
  2489.         B2 = B2 * 2
  2490.       WEND
  2491.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2492.          RETURN
  2493.       CALL GETNUMYN ("Change " + _
  2494.                       MAIN.USER.FILE$ + _
  2495.                      " file to" + _
  2496.                       STR$(B2) + _
  2497.                      " records?",AB)
  2498.       IF NOT AB THEN _
  2499.          GOTO 22100
  2500. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2501.       D.FLAG = -1
  2502.       GOSUB 24110
  2503.       IB = 1
  2504.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2505.       HIGHEST.USER.RECORD = B2
  2506.       GOSUB 30450
  2507.       RETURN
  2508. '
  2509. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA
  2510. '
  2511. 22340 LOCATE 22,1
  2512.       PRINT SPACE$(15) + _
  2513.             TIME$ + _
  2514.             " " + _
  2515.             SPACE$(64);
  2516.       LOCATE 22,35
  2517.       COLOR 0,7
  2518.       PRINT " Reading Data, Wait a sec !!! ";
  2519.       COLOR FG,BG,BORDER
  2520.       RETURN
  2521. '
  2522. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT
  2523. '
  2524. 22350 CALL ASKRO ("Are you satisfied with all changes? (Y/N) or <Q>uit ",24,HJ$)
  2525.       GOSUB 22380
  2526.       ON AB GOTO 12190,59000,60360,22350
  2527. 22380 IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2528.          GOTO 22470
  2529.       CALL ALLCAPS (HJ$)
  2530.       IF HJ$ = "NO" THEN _
  2531.          AB = 1 : _
  2532.          RETURN
  2533.       IF HJ$ = "N" THEN _
  2534.          HJ$ = "NO" : _
  2535.          AB = 1 : _
  2536.          RETURN
  2537.       IF HJ$ = "YES"  THEN _
  2538.          AB = 2 : _
  2539.          RETURN
  2540.       IF HJ$ = "Y" THEN _
  2541.          HJ$ = "YES" : _
  2542.          AB = 2 : _
  2543.          RETURN
  2544.       IF HJ$ = "QUIT" THEN _
  2545.          AB = 3 : _
  2546.          RETURN
  2547.       IF HJ$ = "Q" THEN _
  2548.          AB = 3 : _
  2549.          RETURN
  2550. 22470 AB = 4
  2551.       RETURN
  2552. '
  2553. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH
  2554. '
  2555. 22480 CALL MMINTEGER ("To which copy of RBBS-PC will these parameters apply (1 to 36)?",1,36,I)
  2556.       HJ$ = MID$(STR$(I),2)
  2557.       NODE.ID$ = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2558.       MID$(CONFIG.FILENAME$,5,1) = NODE.ID$
  2559.       RETURN
  2560. 22550 CALL ASKRO ("Parameter " + _
  2561.                    OPTION$ + _
  2562.                   " unavailable with CONFIG " + _
  2563.                    CONFIG.VERSION$ + _
  2564.                   "!  CR to continue",24,A$)
  2565.       RETURN
  2566. 22560 CALL ASKRO ("Parameter " + _
  2567.                    OPTION$ + _
  2568.                   " unavailable maintaining public conference! CR to continue",24,XX$)
  2569.       RETURN
  2570. '
  2571. ' * REBUILD THE USER FILE
  2572. '
  2573. 22570 A$ = "Rebuild the User File"
  2574.       GOSUB 22580
  2575.       IF CONFERENCE.MODE = 2 THEN _
  2576.          GOSUB 22560 : _
  2577.          RETURN
  2578.       CALL GETNUMYN ("Would you like a printed list of deleted users", _
  2579.                      PRINT.DELETED)
  2580.       D.FLAG = 0
  2581.       GOSUB 24110
  2582.       RETURN
  2583. '
  2584. ' * GENERAL CONFIRMATION OF RESPONSES
  2585. '
  2586. 22580 CALL GETNUMYN ("Really "+A$,AB)
  2587.       PRINT
  2588.       IF NOT AB THEN _
  2589.          RETURN 22582
  2590. 22582 RETURN
  2591. '
  2592. ' * PACK THE MESSAGES FILE
  2593. '
  2594. 23160 A$ = "Pack the Message File"
  2595.       GOSUB 22580
  2596.       B1 = MAXIMUM.NUMBER.OF.NODES
  2597.       B3! = HIGHEST.MESSAGE.RECORD
  2598.       PURGE = -1
  2599.       GOSUB 30610
  2600.       RETURN
  2601. '
  2602. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE
  2603. '
  2604. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
  2605.       RETURN
  2606. '
  2607. ' * REPAIR THE MESSAGES FILE
  2608. '
  2609. 23620 RB = 1
  2610.       A$ = "Repair Message File"
  2611.       GOSUB 22580
  2612. '
  2613. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE
  2614. '
  2615. 23630 SK = 0
  2616.       GOSUB 30040              ' <----Print message headers
  2617.       FILNUM = 1
  2618.       GOSUB 30050
  2619.       FIELD 1,128 AS MESSAGE.RECORD$
  2620.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2621.          GET 1,I
  2622.          IF VAL(MID$(MESSAGE.RECORD$,117,4)) > 0 AND _
  2623.             SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2624.             SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2625.             GOSUB 23610 _
  2626.          ELSE GOTO 23725
  2627.          I$ = "K"
  2628.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2629.             I$ = "A
  2630.          IF LOC(1) > NEXT.MESSAGE.RECORD - 1 THEN _
  2631.             GOTO 23730
  2632.          PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2633.                MID$(MESSAGE.RECORD$,76,25) + " " + _
  2634.                MID$(MESSAGE.RECORD$,101,15) + " " + _
  2635.                I$ + " " + _
  2636.                MID$(MESSAGE.RECORD$,117,4) + " " + _
  2637.                STR$(LOC(1)) + " "  + _
  2638.                STR$(I)
  2639.          SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2640.          IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2641.             GOTO 23730
  2642.          IF RB THEN _
  2643.             GOSUB 50580
  2644. 23725 NEXT
  2645. 23730 GET 1,1
  2646.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  2647.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  2648.       HJ$ = RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  2649.       MID$(MESSAGE.RECORD$,127,2) = HJ$
  2650.       PUT 1,1
  2651.       CLOSE 1
  2652.       DELAY! = FNTI! + 5
  2653.       GOSUB 60440
  2654.       RETURN
  2655. '
  2656. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE
  2657. '
  2658. 23731 LOCATE 25,5
  2659.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2660.       IF COMPORT% < 0 THEN _
  2661.          PRINT "COM port cannot be set while using COM0" : _
  2662.          DELAY! = FNTI! + 3 : _
  2663.          GOSUB 60440 : _
  2664.          RETURN _
  2665.       ELSE PRINT "Setting modem firmware switches for RBBS-PC on " + COM.PORT$; ' KG062301
  2666.       DELAY! = FNTI! + 3
  2667.       GOSUB 60440
  2668. '
  2669. '
  2670. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:
  2671. '
  2672. ' *           &C1       = Indicate carrier detect if user is on-line
  2673. ' *           &D3       = Use these settings when DTR drops
  2674. ' *           B1        = Use Bell 212A when 1200 Baud is detected
  2675. ' *           E0        = Do not echo modem commands back to the PC
  2676. ' *           V1        = Issue long form of results codes
  2677. ' *           M0        = Disable the speaker
  2678. '
  2679. '
  2680. 23732 A$ = USER.INITIALIZE.COMMAND$
  2681.       IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3)) = 255 THEN _
  2682.          A$ = A$ + _
  2683.               "Q1"  ' Don't send results to the PC
  2684. 23734 IF NOT FOSSIL THEN _
  2685.          GOTO 23736
  2686.       CALL FOSINIT(COMPORT%,RESULT%)
  2687.       IF RESULT% = -1 THEN _
  2688.          LOCATE 25,1 : _
  2689.          PRINT "ERROR initializing FOSSIL.  FOSSIL deactivated." : _
  2690.          FOSSIL = FALSE : _
  2691.          GOTO 23736
  2692.       COMSPEED% = VAL(MODEM.INIT.BAUD$)
  2693.       PARITY% = 2                                          ' NO PARITY
  2694.       DATABITS% = 3                                        ' 8 DATA BITS
  2695.       STOPBITS% = 0                                        ' 1 STOP BIT
  2696.       CALL FOSSPEED(COMPORT%,COMSPEED%,PARITY%,DATABITS%,STOPBITS%)
  2697.       STATE% = 1
  2698.       CALL FOSDTR(COMPORT%,STATE%)
  2699.       BYTES% = LEN(FIRMWARE.CLEAR.CMND$)
  2700.       CALL FOSWRITE(COMPORT%,BYTES%,FIRMWARE.CLEAR.CMND$)
  2701.       DELAY! = FNTI! + 3
  2702.       GOSUB 60440
  2703.       BYTES% = LEN(USER.FIRMWARE.WRITE.CMND$)
  2704.       CALL FOSWRITE(COMPORT%,BYTES%,USER.FIRMWARE.WRITE.CMND$)
  2705.       DELAY! = FNTI! + 3
  2706.       GOSUB 60440
  2707.       STATE% = 0
  2708.       CALL FOSDTR(COMPORT%,STATE%)
  2709.       GOTO 23739
  2710. 23736 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
  2711.       PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
  2712.       DELAY! = FNTI! + 3
  2713.       GOSUB 60440
  2714.       PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
  2715.       GOSUB 60440
  2716. 23739 IF FOSSIL THEN _
  2717.          CALL FOSEXIT(COMPORT%) : _
  2718.       ELSE CLOSE #3
  2719.       RETURN
  2720. '
  2721. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2722. '
  2723. 23740 A$ = "Renumber the Message File"
  2724.       GOSUB 22580
  2725.       GOSUB 30040
  2726. 23750 B1 = CALLS.TODATE!
  2727.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  2728.                      STR$(CALLS.TODATE! + 1) + _
  2729.                     ")",24,1,B1,RE,CR)
  2730.       IF CR THEN _
  2731.          RETURN
  2732. 23810 CALL GETINIT ("Renumber starting with NEW message # ",24,1,9999,NE,CR)
  2733.       IF CR THEN _
  2734.          RETURN
  2735.       NE = NE - 1
  2736.       FILNUM = 1
  2737.       GOSUB 30050
  2738.       FIELD 1,128 AS MESSAGE.RECORD$
  2739.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2740.          GET 1,I
  2741.          X = ASC(MID$(MESSAGE.RECORD$,116))
  2742.          IF X = 225 OR X = 226 THEN _
  2743.             GOSUB 24010 : _
  2744.             GOSUB 23610
  2745.       NEXT
  2746.       GET 1,1
  2747.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  2748.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  2749.       PUT 1,1
  2750.       CLOSE 1
  2751.       GOSUB 23905
  2752.       DELAY! = FNTI! + 1
  2753.       GOSUB 60440
  2754.       RETURN
  2755. '
  2756. ' *  RESET LAST MESSAGE READ TO ZERO
  2757. '
  2758. 23900 A$ = "Zero out last message read for all users"
  2759.       GOSUB 22580
  2760. 23905 GOSUB 24020
  2761.       GOSUB 24025
  2762.       A! = HIGHEST.USER.RECORD
  2763.       XX$ = "Resetting Last Msg Read by User to 0.  Processing Record #"
  2764.       GOSUB 50345
  2765.       FOR J = 1 TO A!
  2766.          GET 1,J
  2767.          LOCATE 24,X
  2768.          PRINT J;
  2769.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2770.          LSET COMP.USER$ = HASH.VALUE$
  2771.          IF ASC(HASH.VALUE$) = 0 OR _
  2772.             COMP.USER$ = NEW.USER$ OR _
  2773.             COMP.USER$ = EMPTY.USER$ THEN _                          ' KG090203
  2774.               GOTO 23955
  2775.          MID$(USER.OPTIONS$,3,2) = MKI$(0)  ' zero out last msg read
  2776.          PUT 1,J
  2777. 23955 NEXT
  2778.       CLOSE 1
  2779.       RETURN
  2780. 24010 LOCATE 24,15
  2781.       PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
  2782.       IF VAL(MID$(MESSAGE.RECORD$,2,4)) < RE THEN _
  2783.          PRINT " read"; : _
  2784.          RETURN
  2785.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  2786.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  2787.       NE = NE + 1
  2788.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  2789.       MID$(MESSAGE.RECORD$,1,1) = Y$
  2790.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  2791.       PUT 1,I
  2792.       RETURN
  2793. '
  2794. ' * ROUTINE TO PACK THE USERS FILE
  2795. '
  2796. 24020 GOSUB 30060
  2797.       FIELD 1,  31 AS USER.NAME$, _
  2798.                 15 AS PASSWORD$, _
  2799.                  2 AS SECURITY.LEVEL$, _
  2800.                 14 AS USER.OPTIONS$, _
  2801.                 24 AS CITY.STATE$, _
  2802.                 19 AS MACHINE.TYPE$, _
  2803.                 14 AS LAST.DATE.TIME.ON$, _
  2804.                  3 AS LIST.NEW.DATE$, _
  2805.                  2 AS USER.DOWNLOADS$, _
  2806.                  2 AS USER.UPLOADS$, _
  2807.                  2 AS ELASPED.TIME$
  2808.       FIELD 1, 128 AS USER.RECORD$
  2809.       RETURN
  2810. '
  2811. ' *  SHARED ROUTINE TO SET UP USER PROCESSING
  2812. '
  2813. 24025 IF LEN.HASH < 7 THEN _
  2814.          NU = LEN.HASH _
  2815.       ELSE NU = 7
  2816.       NEW.USER$ = LEFT$("NEWUSER",NU)
  2817.       EMPTY.USER$ = SPACE$(NU)                                       ' KG090203
  2818.       COMP.USER$ = EMPTY.USER$
  2819.       RETURN
  2820. 24040 CALL GETNUMYN ("Make Hilight if and only if color graphics selected",X)
  2821.       IF NOT X THEN _
  2822.          RETURN
  2823.       GOTO 24052
  2824. '
  2825. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT
  2826. '
  2827. 24050 A$ = "Make all callers answer required questionnaire once"
  2828.       GOSUB 22580
  2829. 24052 GOSUB 24020
  2830.       GOSUB 24025
  2831.       A! = HIGHEST.USER.RECORD
  2832.       XX$ = "Processing Record #"
  2833.       GOSUB 50345
  2834.       FOR J = 1 TO A!
  2835.          GET 1,J
  2836.          LOCATE 24,X
  2837.          PRINT J;
  2838.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2839.          LSET COMP.USER$ = HASH.VALUE$
  2840.          IF ASC(HASH.VALUE$) = 0 OR _
  2841.             COMP.USER$ = NEW.USER$ OR _
  2842.             COMP.USER$ = EMPTY.USER$ THEN _                          ' KG090203
  2843.               GOTO 24055
  2844.          USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  2845.          IF ILOOKUP = 12 THEN _
  2846.             K = ((ASC(MID$(USER.OPTIONS$,6,1)) MOD 3) = 2) : _
  2847.             IF K THEN _
  2848.                USER.OPTIONS = USER.OPTIONS OR 1024 _ ' hilite
  2849.             ELSE USER.OPTIONS = USER.OPTIONS AND 1023 _ ' don't hilite
  2850.          ELSE USER.OPTIONS = USER.OPTIONS AND 1791 'Zero out Req Ques flag
  2851.          MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  2852.          PUT 1,J
  2853. 24055 NEXT
  2854.       CLOSE 1
  2855.       RETURN
  2856. '
  2857. ' COMMON ROUTINE TO EXPAND OR CONTRACT THE USER FILE
  2858. '
  2859. 24110 GOSUB 30040
  2860.       IF NO.OLD.FILE THEN _
  2861.          GOTO 24111
  2862.       GOSUB 24020
  2863.       GOSUB 50350
  2864.       A$ = F$
  2865.       GOSUB 50095
  2866. 24111 IF NETWORK.TYPE = 6 THEN _
  2867.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  2868.       ELSE OPEN "R",2,A$,128
  2869.       FIELD 2,  31 AS USER.NAME.N$, _
  2870.                 15 AS PASSWORD.N$, _
  2871.                  2 AS SECURITY.LEVEL.N$, _
  2872.                 14 AS USER.OPTIONS.N$, _
  2873.                 24 AS CITY.STATE.N$, _
  2874.                 19 AS MACHINE.TYPE.N$, _
  2875.                 14 AS LAST.DATE.TIME.ON.N$, _
  2876.                  3 AS LIST.NEW.DATE.N$, _
  2877.                  2 AS USER.DOWN.LOADS.N$, _
  2878.                  2 AS USER.UPLOADS.N$, _
  2879.                  2 AS ELAPSED.TIME.N$
  2880.       FIELD 2, 128 AS USER.RECORD.N$
  2881.       CURRENT.MONTH = VAL(LEFT$(DATE$,2)) + (VAL(RIGHT$(DATE$,2)) * 12)
  2882.       A! = 0
  2883.       GOSUB 50840
  2884.       CURRENT.USER.COUNT = 1
  2885.       IF NO.OLD.FILE THEN _
  2886.          HIGHEST.USER.RECORD = A! : _
  2887.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  2888.          GOSUB 30450 : _
  2889.          RETURN
  2890.       A! = LOF(1) / 128.0!
  2891.       GOSUB 24025
  2892.       PURGED.COUNT = 0
  2893. 24112 FOR J  =  1 TO A!
  2894.          GET 1
  2895. 24114    HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2896.          LSET COMP.USER$ = HASH.VALUE$
  2897. 24116    MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2)) + _
  2898.                                (VAL(MID$(LAST.DATE.TIME.ON$,7,2)) * 12)
  2899.          MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH - MONTH.OF.LAST.LOGON
  2900.          IF COMP.USER$ = NEW.USER$ THEN _                            ' KG090203
  2901.             A$ = "" : _
  2902.             GOTO 24430
  2903.          X = ASC(HASH.VALUE$)
  2904.          IF X = 0 OR _
  2905.             COMP.USER$ = EMPTY.USER$ THEN _
  2906.             GOTO 24450
  2907.          Y = 1
  2908. 24280    IF X < 32 OR X > 126 THEN _
  2909.             A$ = "Bad name" : _
  2910.             GOTO 24430
  2911.          IF Y < LEN.HASH THEN _
  2912.             Y = Y + 1 : _
  2913.             X = ASC(MID$(HASH.VALUE$,Y,1)) : _
  2914.             GOTO 24280
  2915.          HJ$ = HASH.VALUE$                                           ' KG090203
  2916.          CALL ALLCAPS (HJ$)                                          ' KG090203
  2917.          IF HJ$ <> HASH.VALUE$ THEN _                                ' KG090203
  2918.             A$ = "Bad name" : _                                      ' KG090203
  2919.             GOTO 24430                                               ' KG090203
  2920.          HJ$ = "copied"
  2921.          IF D.FLAG THEN _
  2922.             GOTO 24290
  2923.          SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  2924.          IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  2925.             HJ$ = "exempt" : _
  2926.             GOTO 24290                           ' copy users exempt from purges
  2927.          IF SECURITY.LEVEL < MINIMUM.LOGON.SECURITY THEN _
  2928.             HJ$ = "locked" : _
  2929.             GOTO 24290                                 ' copy "locked-out" users
  2930.          IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  2931.             A$ = "(Last on " + LAST.DATE.TIME.ON$ + ") " + _
  2932.                  STR$(MONTHS.SINCE.LAST.LOGON) : _
  2933.             GOTO 24430                                     'Purge inactive users
  2934.          Y = 1
  2935. 24290    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " " ; HJ$ ; "...";
  2936.          GOSUB 50720
  2937.          PRINT STR$(MONTHS.SINCE.LAST.LOGON)
  2938.          GOTO 24450
  2939. 24430    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2940.          IF PRINT.DELETED THEN _
  2941.             LPRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2942.          PURGED.COUNT = PURGED.COUNT + 1
  2943. 24450 NEXT
  2944.       CLOSE 1,2
  2945.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  2946.       GOSUB 30450
  2947. 24730 PRINT PURGED.COUNT;" USERS PURGED"
  2948.       CALL GETNUMYN ("Delete the old " + _
  2949.                       MAIN.USER.FILE$ + _
  2950.                      " file?",AB)
  2951.       IF AB THEN _
  2952.          GOTO 24770
  2953. 24750 A$ = MAIN.USER.FILE$
  2954.       GOSUB 50096
  2955.       NAME MAIN.USER.FILE$ AS A$
  2956.       GOTO 24780
  2957. 24770 KILL MAIN.USER.FILE$
  2958. 24780 GOSUB 50350
  2959.       A$ = F$
  2960.       GOSUB 50095
  2961.       NAME A$ AS MAIN.USER.FILE$
  2962.       RETURN
  2963. 24790 CALL GETNUMYN ("Really check FMS directory",AB)
  2964.       IF NOT AB THEN _
  2965.          RETURN
  2966.       CALL CHKFMSDIR (DIRECTORY.PATH$ + FMS.DIRECTORY$ + "." + DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  2967.       RETURN
  2968. '
  2969. ' * ROUTINE TO RESET ACTIVE PRINTERS FOR ALL NODES
  2970. '
  2971. 24795 FILNUM = 2
  2972.       GOSUB 30050
  2973.       FIELD 2,128 AS RR$
  2974.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  2975.          GET 2,J!
  2976.          MID$(RR$,38,2) = " 0"
  2977.          PUT 2,J!
  2978.       NEXT
  2979.       CLOSE 2
  2980.       RETURN
  2981. '
  2982. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  2983. '
  2984. 24800 CLS
  2985.       I! = FRE(C$)
  2986.       COLOR 0,7,0
  2987.       LOCATE 1,10
  2988.       PRINT "RBBS-PC CPC17 Default Configuration " + CONFIG.VERSION$;
  2989.       IF CONFERENCE.MODE THEN _
  2990.          GOSUB 24970
  2991.       COLOR FG,BG,BORDER
  2992.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  2993.       RETURN
  2994. '
  2995. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  2996. '
  2997. 24970 LOCATE 2,1
  2998.       PRINT SPACE$(10)
  2999.       LOCATE 2,10
  3000.       A$ = "Private"
  3001.       IF CONFERENCE.MODE = 2 THEN _
  3002.          A$ = "Public"
  3003.       COLOR 31,0,0
  3004.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  3005.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF") - 1) + _
  3006.             ")";
  3007.       RETURN
  3008. '
  3009. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  3010. '
  3011. 25020 XX$ = "In file " + _
  3012.             MAIN.USER.FILE$ + _
  3013.             " " + _
  3014.             A$ + _
  3015.             " record"
  3016.       GOTO 25035
  3017. 25030 IF PURGE THEN _
  3018.          RETURN
  3019.       XX$ = A$ + _
  3020.             " file " + _
  3021.             MAIN.MESSAGE.FILE$ + _
  3022.             " record"
  3023. 25035 GOSUB 50345
  3024.       RETURN
  3025. '
  3026. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE
  3027. '
  3028. 25040 REFRESH = 0
  3029.       IF CONFERENCE.MODE = 0 THEN _
  3030.          GOTO 25050
  3031.       GOSUB 30100
  3032.       CALL GETNUMYN ("End conference maintenance?",AB)
  3033.       IF NOT AB THEN _
  3034.          GOTO 25050
  3035. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3036.       MAIN.USER.FILE$ = MAINUSR$
  3037.       REFRESH = 1
  3038.       RETURN
  3039. 25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
  3040.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3041.          GOTO 25040
  3042.       CALL ALLCAPS (HJ$)
  3043.       CP$ = HJ$
  3044. 25090 X$ = "this conference's files"
  3045.       GOSUB 15205
  3046.       CP$ = HJ$ + _
  3047.             CP$
  3048.       MAIN.MESSAGE.FILE$ = CP$ + _
  3049.                            "M.DEF
  3050. 25142 CALL GETNUMYN ("Does this conference have a user's file?",AB)
  3051.       IF AB THEN _
  3052.          GOTO 25160
  3053. 25144 CONFERENCE.MODE = 2
  3054.       GOTO 25170
  3055. 25160 CONFERENCE.MODE = 1
  3056.       UG = 0
  3057.       MAIN.USER.FILE$ = CP$ + _
  3058.                         "U.DEF"
  3059. 25170 REFRESH = 2
  3060.       RETURN
  3061. '
  3062. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES
  3063. '
  3064. 25380 CALL GETNUMYN ("Will you be using DOS sub-directories?",WILL.SUBDIRS.B.USED)
  3065.       IF WILL.SUBDIRS.B.USED THEN _
  3066.          RETURN
  3067.       UPLOAD.TO.SUBDIR = FALES
  3068.       DOWNLOAD.TO.SUBDIR = FALSE
  3069.       RETURN
  3070. 25420 CALL GETNUMYN ("Are uploads to a DOS sub-directory?",UPLOAD.TO.SUBDIR)
  3071.       RETURN
  3072. 25460 CALL GETNUMYN ("Are downloads from DOS sub-directories?",DOWNLOAD.TO.SUBDIR)
  3073.       RETURN
  3074. '
  3075. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF
  3076. '
  3077. 25495 IF NOT UPLOAD.TO.SUBDIR THEN _
  3078.          GOTO 25497
  3079.       A$ = "upload"
  3080.       CALL GETNUMYN ("Change upload DOS sub-directory?",AB)
  3081.       IF AB THEN _
  3082.          GOTO 25500
  3083. 25497 IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3084.          RETURN
  3085.       A$ = "download"
  3086.       CALL GETNUMYN ("Modify download DOS sub-directories?",AB)
  3087.       IF AB THEN _
  3088.          GOTO 25505
  3089. 25498 RETURN
  3090. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3091.          GOTO 25502
  3092. 25501 LOCATE 23,5
  3093.       PRINT SPC(74)
  3094.       LOCATE 23,5
  3095.       PRINT "Current " + A$ + " DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3096. 25502 GOSUB 25850
  3097.       IF LEN(HJ$) < 1 THEN _
  3098.          GOTO 25505
  3099.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3100.          SWAP UPLOAD.SUBDIR$,X$ : _
  3101.          IF X$ = "" THEN _
  3102.             GOTO 25501 _
  3103.          ELSE 25505
  3104.       GOTO 25502
  3105. 25505 IF A$="upload" THEN _
  3106.          GOTO 25497
  3107.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3108.          RETURN
  3109.       LOCATE 23,5
  3110.       PRINT SPC(74)
  3111.       LOCATE 23,5
  3112.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3113. 25510 CALL ASKRO ("L>ist, C>hange, A>dd, D>elete " + A$ +" DOS sub-directories? (CR ends) ",24,HJ$)
  3114.       CALL ALLCAPS (HJ$)
  3115.       IF LEN(HJ$) < 1 THEN _
  3116.          GOTO 25498
  3117.       IF LEN(HJ$) <> 1 THEN _
  3118.          GOTO 25505
  3119.       FF = INSTR("LCAD",HJ$)
  3120.       IF FF = 0 THEN _
  3121.          GOTO 25510
  3122.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3123.          GOTO 25510
  3124.       ON FF GOSUB 25610,25670,25730,25670
  3125.       GOTO 25505
  3126. 25610 LAST = (DNLD.SUB/16) + 1
  3127.       INCR = 1
  3128.       FOR IX = 1 TO LAST
  3129.          GOSUB 24800
  3130.          LOCATE 4,1
  3131.          PRINT "DOS sub-directories from which downloads are done:";
  3132.          INDEX = 4
  3133.          FOR I = 1 TO 16
  3134.             LOCATE INDEX + I,1
  3135.             PRINT DNLD$(INCR);
  3136.             INCR = INCR + 1
  3137.             IF INCR > DNLD.SUB THEN _
  3138.                GOTO 25668
  3139.          NEXT
  3140. 25636    CALL GETNUMYN ("More",AB)
  3141.          IF NOT AB THEN _
  3142.             GOTO 25668
  3143. 25644 NEXT
  3144. 25668 RETURN
  3145. 25670 GOSUB 25850
  3146.       IF LEN(HJ$) < 1 THEN _
  3147.          RETURN
  3148.       GOSUB 26030
  3149.       A$ = " not found!"
  3150.       IF X$ = "" THEN _
  3151.          GOTO 25682
  3152.       FOR I = 1 TO DNLD.SUB
  3153.          IF X$ = DNLD$(I) THEN _
  3154.             GOTO 25698
  3155.       NEXT
  3156. 25682 CALL ASKRO (X$ + A$ + " (CR to continue)",24,HJ$)
  3157.       A$ = "download"
  3158.       RETURN
  3159. 25698 IF FF = 4 THEN _
  3160.          FOR X = I TO DNLD.SUB : _
  3161.             DNLD$(X) = DNLD$(X + 1) : _
  3162.          NEXT : _
  3163.          A$ = " deleted!" : _
  3164.          DNLD.SUB = DNLD.SUB - 1 : _
  3165.          GOTO 25682
  3166.       IF FF = 2 THEN _
  3167.          A$ = "download" : _
  3168.          NEXT.MESSAGE.RECORD = I : _
  3169.          GOSUB 25850 : _
  3170.          GOSUB 26030 : _
  3171.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3172.          A$ = " changed!" : _
  3173.          GOTO 25682
  3174. 25730 X$ = ""
  3175.       GOSUB 25850
  3176.       IF LEN(HJ$) < 1 THEN _
  3177.          RETURN
  3178.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3179.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3180.             GOTO 25735
  3181.       NEXT
  3182.       GOSUB 60380
  3183.       CALL ASKRO (X$ + " is not a drive eligible for downloading. (CR to continue)",24,HJ$)
  3184.       GOTO 25730
  3185. 25735 IF X$ = "" THEN _
  3186.          GOTO 25498
  3187.       DNLD.SUB = DNLD.SUB + 1
  3188.       DNLD$(DNLD.SUB) = X$
  3189.       RETURN
  3190. '
  3191. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY
  3192. '
  3193. 25850 CALL ASKRO ("Enter " + A$ + " DOS sub-directory name (CR to end). ",24,HJ$)
  3194.       CALL ALLCAPS (HJ$)
  3195.       IF LEN(HJ$) < 1 THEN _
  3196.          RETURN
  3197.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3198.          X$ = HJ$ : _
  3199.          RETURN
  3200.       IF INSTR(HJ$,":\") <> 2 THEN _
  3201.          GOTO 25850
  3202.       X$ = HJ$
  3203.       FOR I = 4 TO LEN(X$)
  3204.          Y = INSTR(I,X$,"\")
  3205.          IF Y = 0 THEN _
  3206.             L1 = LEN(X$) - I + 1 : _
  3207.             GOTO 25876
  3208.          IF Y <> 0 THEN _
  3209.             L1 = Y - I + 1 : _
  3210.             GOTO 25876
  3211.       NEXT
  3212. 25876 HJ$ = MID$(X$,I,L1)
  3213.       IF LEN(HJ$) > 12 THEN _
  3214.          GOTO 25850
  3215.       L1 = INSTR(HJ$,".")
  3216.       IF L1 = 0 THEN _
  3217.          IF LEN(HJ$) < 9 THEN _
  3218.             GOTO 25920 _
  3219.          ELSE GOTO 25850
  3220.       IF L1 > 9 THEN _
  3221.          GOTO 25850
  3222.       IF L1 < 2 THEN _
  3223.          GOTO 25850
  3224.       IF LEN(HJ$) - L1 > 3 THEN _
  3225.          GOTO 25850
  3226.       I = 0
  3227.       GOSUB 25920
  3228.       IF I = 0 THEN _
  3229.          RETURN
  3230.       GOTO 25850
  3231. 25920 FOR J = 1 TO LEN(HJ$)
  3232.          X = ASC(MID$(HJ$,J,1))
  3233.          IF (X > 63 AND X < 91) THEN _
  3234.             GOTO 26020
  3235.          IF (X > 47 AND X < 58) THEN _
  3236.             GOTO 26020
  3237.          IF (X = 33) THEN _
  3238.             GOTO 26020
  3239.          IF (X > 34 AND X < 42) THEN _
  3240.             GOTO 26020
  3241.          IF (X > 43 AND X < 47) THEN _
  3242.             GOTO 26020
  3243.          IF (X > 96 AND X < 124) THEN _
  3244.             GOTO 26020
  3245.          IF (X = 125) THEN _
  3246.             GOTO 26020
  3247.          I = 1
  3248.          RETURN
  3249. 26020 NEXT
  3250.       RETURN
  3251. '
  3252. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING
  3253. '
  3254. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3255.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3256.             RETURN
  3257.       NEXT
  3258.       X$ = ""
  3259.       RETURN
  3260. '
  3261. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS
  3262. '
  3263. 26040 CALL GETNUMYN ("Is RBBS-PC to drop to DOS at a specific time each day?",AB)
  3264.       TIME.TO.DROP.TO.DOS = 0
  3265.       IF AB THEN _
  3266.          GOTO 26060
  3267. 26050 GOTO 26065
  3268. 26060 CALL GETINIT ("Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No)",24,0,2359,TIME.TO.DROP.TO.DOS,CR)
  3269. 26065 RETURN
  3270. '
  3271. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN
  3272. '
  3273. 26070 CLS
  3274.       LOCATE 3,5
  3275.       PRINT "RBBS-PC supports the following store-and-forward mail systems:"
  3276.       LOCATE 5,20
  3277.       PRINT "Environment"
  3278.       LOCATE 7,10
  3279.       PRINT "0. None"
  3280.       LOCATE 9,10
  3281.       PRINT "1. SeaDog"
  3282.       LOCATE 11,10
  3283.       PRINT "2. Binkley Term"
  3284.       LOCATE 13,10
  3285.       PRINT "3. X.400 (to be supported in the future)"
  3286.       LOCATE 15,10
  3287.       PRINT "4. GTE's PC-Pursuit (to be supported in the future)"
  3288.       LOCATE 17,10
  3289.       PRINT "5. G.E.'s GENIE's QuikComm (to be supported in the future)"
  3290. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3291.       NET.MAIL$ = "<none>"
  3292.       IF AB = 1 THEN _
  3293.          NET.MAIL$ = "SeaDog"
  3294.       IF AB = 2 THEN _
  3295.          NET.MAIL$ = "BINKLEY TERM"
  3296.       RETURN
  3297. 26100 CALL GETASCII ("Turn Echo On",HOST.ECHO.ON$)
  3298.       RETURN
  3299. 26105 CALL GETASCII ("Line Acknowledge",DEFAULT.LINE.ACK$)
  3300.       RETURN
  3301. 26110 CALL GETASCII ("Turn Echo Off",HOST.ECHO.OFF$)
  3302.       RETURN
  3303. 26115 CALL GETASCII ("Turn Graphic Emphasis ON",EMPHASIZE.ON.DEF$)
  3304.       RETURN
  3305. 26120 CALL GETASCII ("Turn Graphic Emphasis OFF",EMPHASIZE.OFF.DEF$)
  3306.       RETURN
  3307. '
  3308. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)
  3309. '
  3310. 30000 CALL FINDFILE (FILE$,OKAY) ' <---- check to see if file exists
  3311. 30030 RETURN
  3312. '
  3313. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  3314. '
  3315. 30040 FILNUM = 2
  3316.       GOSUB 30050
  3317.       FIELD 2,128 AS RR$
  3318.       GET 2,1
  3319.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8 = number of last message on system
  3320.       AUTO.ADD.SECURITY = CVI(MID$(RR$,9,2))         '  9- 10 = min. security to auto. add a user
  3321.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61 = next avail. user record
  3322.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  3323.       IF FIRST.MESSAGE.RECORD < 3 THEN _
  3324.          FIRST.MESSAGE.RECORD = 3
  3325.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  3326.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  3327.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  3328.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  3329.       IF MAXIMUM.NUMBER.OF.NODES < 1 THEN _
  3330.          MAXIMUM.NUMBER.OF.NODES = 1
  3331.       CLOSE 2
  3332.       FIRST.USER.RECORD = 1
  3333.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3334.          AUTO.ADD.SECURITY$ = "CONF. ONLY" _
  3335.       ELSE AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  3336.       RETURN
  3337. ' * OPEN MESSAGE FILE
  3338. 30050 CLOSE FILNUM
  3339.       IF NETWORK.TYPE = 6 THEN _
  3340.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #FILNUM LEN = 128 _
  3341.       ELSE OPEN "R",FILNUM,MAIN.MESSAGE.FILE$,128
  3342.       RETURN
  3343. ' * OPEN USER FILE
  3344. 30060 CLOSE 1
  3345.       IF NETWORK.TYPE = 6 THEN _
  3346.          OPEN MAIN.USER.FILE$ FOR RANDOM SHARED AS #1 LEN = 128 _
  3347.       ELSE OPEN "R",1,MAIN.USER.FILE$,128
  3348.       RETURN
  3349. '
  3350. ' * COMMON ROUTINE TO UPDATE AUTO ADD SECURITY TO CONFERENCE FILE
  3351. '
  3352. 30100 FILNUM = 1
  3353.       GOSUB 30050
  3354.       FIELD 1,8 AS MR1$, 2 AS MR2$, 118 AS MR3$
  3355.       GET 1,1
  3356.       LSET MR2$ = MKI$(AUTO.ADD.SECURITY)
  3357.       PUT 1,1
  3358.       CLOSE 1
  3359.       RETURN
  3360. '
  3361. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD
  3362. '
  3363. 30450 FILNUM = 2
  3364.       GOSUB 30050
  3365.       FIELD 2,128 AS RR$
  3366.       GET 2,1
  3367.       MID$(RR$,9,2)   = MKI$(AUTO.ADD.SECURITY)      '  9- 10 = min. security to auto. add a user
  3368.       MID$(RR$,57,5)  = LEFT$(STR$(CURRENT.USER.COUNT)  +SPACE$(5),5) ' 57- 61 = next avail. user record
  3369.       MID$(RR$,68,7)  = LEFT$(STR$(FIRST.MESSAGE.RECORD)+SPACE$(7),7) ' 68- 74 = first rec. of msgs file
  3370.       MID$(RR$,75,7)  = LEFT$(STR$(NEXT.MESSAGE.RECORD) +SPACE$(7),7) ' 75- 81 = next avail. msgs record
  3371.       MID$(RR$,82,7)  = LEFT$(STR$(HIGHEST.MESSAGE.RECORD)+SPACE$(7),7) ' 82- 88 = last rec. of msgs file
  3372.       MID$(RR$,89,7)  = LEFT$(STR$(MAXIMUM.NUMBER.OF.MSGS)+SPACE$(7),7) ' 89- 95 = maximum number of messages
  3373.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3374.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3375.          HJ$ = MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3376.       MID$(RR$,127,2) = HJ$                          '127-128 = maximum number of "nodes"
  3377.       PUT 2,1
  3378.       CLOSE 2
  3379.       RETURN
  3380. '
  3381. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE
  3382. '
  3383. 30610 A$ = MAIN.MESSAGE.FILE$
  3384.       IF NO.OLD.FILE THEN _
  3385.          GOTO 30612
  3386.       FILNUM = 1
  3387.       GOSUB 30050
  3388.       FIELD 1,128 AS MESSAGE.RECORD$
  3389.       GOSUB 50095
  3390. 30612 CLOSE 2
  3391.       IF NETWORK.TYPE = 6 THEN _
  3392.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  3393.       ELSE OPEN "R",2,A$,128
  3394.       FIELD 2,128 AS RR$
  3395.       A$="Copying"
  3396.       IF NO.OLD.FILE THEN _
  3397.          A$ = "Creating preformatted"
  3398.       OE = B1
  3399.       IF MAXIMUM.NUMBER.OF.NODES <= B1 THEN _
  3400.          OE = MAXIMUM.NUMBER.OF.NODES
  3401.       FOR J=1 TO OE + 1                 ' WRITE CHECKPOINT AND NODE RECORDS
  3402.          IF NO.OLD.FILE AND J = 1 THEN _
  3403.             GOSUB 31040
  3404.          IF NO.OLD.FILE AND J <> 1 THEN _
  3405.             GOSUB 31050
  3406.          IF NO.OLD.FILE = FALSE THEN _
  3407.             GET 1,J : _
  3408.             LSET RR$ = MESSAGE.RECORD$
  3409.          PUT 2
  3410.          GOSUB 25030
  3411.       NEXT
  3412.       IF NO.OLD.FILE THEN _
  3413.          GOTO 30850
  3414.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3415.          GOTO 30780
  3416.       FOR J = OE + 1 TO B1             ' WRITE OUT EXPANISON NODE RECORDS
  3417.          GOSUB 31050
  3418.          PUT 2
  3419.          GOSUB 25030
  3420.       NEXT
  3421. 30780 MAXIMUM.NUMBER.OF.NODES = B1     ' SET VALUE FOR MAXIMUM NUMBER OF NODES
  3422.       JX = FIRST.MESSAGE.RECORD
  3423.       GET 1,JX
  3424.       WHILE VAL(MID$(MESSAGE.RECORD$,2,4)) = 0 AND (JX < NEXT.MESSAGE.RECORD)
  3425.          JX = JX + 1
  3426.          GET 1, JX
  3427.       WEND
  3428.       IF JX > FIRST.MESSAGE.RECORD THEN _
  3429.          PRINT (JX-FIRST.MESSAGE.RECORD);" bad records purged"
  3430.       FOR J = JX TO NEXT.MESSAGE.RECORD - 1
  3431. 30830    GET 1,J
  3432.          IF PURGE <> -1 THEN _
  3433.             GOTO 30840
  3434.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  3435.             IF VAL(MID$(MESSAGE.RECORD$,2,4)) < 1 THEN _
  3436.                PRINT " bad header purged..." : _
  3437.                GOTO 30842 _
  3438.             ELSE PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3439.                  GOTO 30840
  3440.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3441.             PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3442.             J = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) : _
  3443.             GOTO 30830
  3444. 30840    LSET RR$ = MESSAGE.RECORD$
  3445.          PUT 2                    ' WRITE OUT MESSAGE RECORD
  3446.          GOSUB 25030
  3447. 30842 NEXT
  3448.       B1 = LOC(2) + 1             ' GET NEW FILE'S NEXT MESSAGE RECORD
  3449.       CLOSE 1
  3450.       IF B3! < LOC(2) + 1 THEN _
  3451.          GOTO 30960
  3452. 30850 IF NO.OLD.FILE OR PURGE THEN _
  3453.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3454.          PURGE = 0 : _
  3455.          A$ = "Preformatting"
  3456.       IF MESSAGES.CAN.GROW THEN _
  3457.          GOTO 30960
  3458.       GOSUB 25030
  3459.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3460.          LSET RR$ = SPACE$(128)
  3461.          PUT 2                    ' WRITE OUT EXPANSION MESSAGE RECORDS
  3462.          LOCATE 24,X
  3463.          PRINT STR$(LOC(2)) + SPACE$(10);
  3464.       NEXT
  3465. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3466.       NEXT.MESSAGE.RECORD = B1
  3467.       IF NEXT.MESSAGE.RECORD < FIRST.MESSAGE.RECORD THEN _
  3468.          NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD
  3469.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3470.       CLOSE 2
  3471. 30980 IF NO.OLD.FILE THEN _
  3472.          RETURN
  3473.       CALL GETNUMYN ("Delete the old " + _
  3474.                       MAIN.MESSAGE.FILE$ + _
  3475.                      " file?",AB)
  3476.       IF AB THEN _
  3477.          GOTO 31020
  3478. 31000 A$ = MAIN.MESSAGE.FILE$
  3479.       GOSUB 50096
  3480.       NAME MAIN.MESSAGE.FILE$ AS A$
  3481.       GOTO 31030
  3482. 31020 KILL MAIN.MESSAGE.FILE$
  3483. 31030 A$ = MAIN.MESSAGE.FILE$
  3484.       GOSUB 50095
  3485.       NAME A$ AS MAIN.MESSAGE.FILE$
  3486.       GOSUB 30450
  3487. 31035 RETURN
  3488. '
  3489. ' * COMMON SUBROUTINE TO CREATE A BLANK "CHECKPOINT" RECORD IN THE MESSAGE FILE
  3490. '
  3491. 31040 LSET RR$ = " 1      " + _               ' NUMBER OF LAST MESSAGE
  3492.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  3493.                  SPACE$(116) + _              ' BLANKS IN ALL OTHER FIELDS
  3494.                  RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  3495.       RETURN
  3496. '
  3497. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  3498. '
  3499. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3500.       RETURN
  3501. '
  3502. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION
  3503. '
  3504. 50095 IF INSTR(A$,".") THEN _
  3505.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3506.               ".BAK" : _
  3507.          RETURN _
  3508.       ELSE A$ = A$ + _
  3509.                 ".BAK" : _
  3510.       RETURN
  3511. '
  3512. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION
  3513. '
  3514. 50096 IF INSTR(A$,".") THEN _
  3515.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3516.               ".OLD" : _
  3517.          RETURN _
  3518.       ELSE A$ = A$ + _
  3519.                 ".OLD" : _
  3520.       RETURN
  3521. '
  3522. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  3523. '
  3524. 50345 I! = FRE(C$)
  3525. 50346 LOCATE 24,1
  3526.       PRINT SPACE$(5)+XX$+SPACE$(74-LEN(XX$));
  3527.       X = 5 + LEN(XX$) + 1
  3528.       RETURN
  3529. 50350 F$ = MAIN.USER.FILE$
  3530.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3531.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".") - 1)
  3532.       RETURN
  3533. '
  3534. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE
  3535. '
  3536. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3537.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF
  3538. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3539. 50500 GOSUB 30060
  3540.       UG = LOF(1) / 128.0!
  3541.       MAX.USR.FILE.SIZE.FRM.DEF = UG
  3542.       HIGHEST.USER.RECORD = UG
  3543.       GOTO 50560
  3544. '
  3545. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE
  3546. '
  3547. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5 * MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3548. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3549. 50550 FILNUM = 1
  3550.       GOSUB 30050
  3551.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1) / 128 THEN _
  3552.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1) / 128
  3553. 50560 GOSUB 22340
  3554.       CLOSE 1
  3555.       RETURN
  3556. '
  3557. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS
  3558. '
  3559. 50580 OLD = LOC(1)
  3560.       GET 1,I + 1
  3561.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3562.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3563.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3564.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3565.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3566.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3567.          RETURN
  3568.       PRINT "Message chain broken at record number " + STR$(OLD)
  3569.       PRINT "Message chain repair in progress!
  3570.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD - 1
  3571.          GET 1,IQ
  3572.          IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3573.             OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3574.             AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3575.             AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3576.             AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3577.             AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3578.             GET 1,OLD : _
  3579.             MID$(MESSAGE.RECORD$,117,4) = STR$(IQ - OLD) : _
  3580.             PUT 1,OLD : _
  3581.             PRINT "Message chain repaired." : _
  3582.             I = IQ : _
  3583.             RETURN
  3584.       NEXT
  3585.       RETURN 23730
  3586. '
  3587. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD #
  3588. '
  3589. 50720 JX = LEN.HASH
  3590.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  3591.         JX = JX - 1
  3592.       WEND
  3593.       X$ = MID$(HASH.VALUE$,1,JX)
  3594.       UIX# = FNHSH(X$)
  3595.       Q = FNHSH2(X$)
  3596.       NSR = 1
  3597.       RO = CSRLIN
  3598.       CO = POS(0)
  3599. 50722 GET 2,UIX#
  3600.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  3601.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  3602.          GOTO 50730
  3603.       IF HASH.VALUE$ <> HASH.VALUE.N$ THEN _
  3604.          GOTO 50725
  3605.       IF START.INDIV > 0 AND LEN.INDIV > 0 THEN _
  3606.          IF MID$(USER.RECORD$,START.INDIV,LEN.INDIV) <> MID$(USER.RECORD.N$,START.INDIV,LEN.INDIV) THEN _
  3607.             GOTO 50725
  3608.       LOCATE RO,CO
  3609.       PRINT "Omitted Duplicate ";
  3610.       PURGED.COUNT = PURGED.COUNT + 1
  3611.       RETURN
  3612. 50725 UIX# = UIX# + Q
  3613.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  3614.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  3615.       NSR = NSR + 1
  3616.       LOCATE RO,CO
  3617.       PRINT "searching";UIX#;
  3618.       GOTO 50722
  3619. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  3620.       PUT 2,UIX#
  3621.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  3622.       LOCATE RO,CO
  3623.       PRINT " pos#";UIX#;"/";NSR;"srch(s) ";
  3624.       RETURN
  3625. '
  3626. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE
  3627. '
  3628. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  3629.       GOSUB 25020
  3630.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  3631.          LSET USER.RECORD.N$ = TEMPLATE$
  3632.          PUT 2
  3633.          LOCATE 24,X
  3634.          PRINT J;
  3635.       NEXT
  3636.       PRINT
  3637.       RETURN
  3638. '
  3639. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES
  3640. '
  3641. 59000 GOSUB 30100
  3642.       IF EXPERT.USER$ = "NOVICE" THEN _
  3643.          EXPERT.USER = 0
  3644.       IF EXPERT.USER$ = "EXPERT" THEN _
  3645.          EXPERT.USER = -1
  3646.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  3647.       PROMPT.BELL = -1
  3648.       IF PROMPT.BELL$ = "OFF" THEN _
  3649.          PROMPT.BELL = 0
  3650.       PAGING.PRINTER.SUPPORT$ = ". "
  3651.       IF M11$ = "YES" THEN _
  3652.          PAGING.PRINTER.SUPPORT$ = ". " + _
  3653.                                    CHR$(7)
  3654.       GOSUB 15780
  3655.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  3656.          MAIN.MESSAGE.FILE$ = MAINMSG$
  3657.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  3658.          MAIN.USER.FILE$ = MAINUSR$
  3659.       IF CONFERENCE.MODE THEN _
  3660.          GOSUB 30040
  3661.       IF CALLERS.FILE$ = NONE.PICKED$ THEN _
  3662.          CALLERS.FILE$ = ""
  3663.       IF ALTDIR.EXTENSION$ = NONE.PICKED$ THEN _
  3664.          ALTDIR.EXTENSION$ = ""
  3665.       IF ALWAYS.STREW.TO$ = NONE.PICKED$ THEN _
  3666.          ALWAYS.STREW.TO$ = ""
  3667.       IF QUES.PATH$ = NONE.PICKED$ THEN _
  3668.          QUES.PATH$ = ""
  3669.       IF NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3670.          NEW.USER.QUESTIONNAIRE$ = ""
  3671.       IF REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3672.          REQUIRED.QUESTIONNAIRE$ = ""
  3673.       IF NET.MAIL$ = NONE.PICKED$ THEN _
  3674.          NET.MAIL$ = "NONE"
  3675.       IF CONFMAIL.LIST$ = NONE.PICKED$ THEN _
  3676.          CONFMAIL.LIST$ = ""
  3677.       IF REGISTRATION.PROGRAM$ = NONE.PICKED$ THEN _
  3678.          REGISTRATION.PROGRAM$ = ""
  3679. 59020 OPEN "O",#1,CONFIG.FILENAME$
  3680.       IF INSTR(MO$,":") < 1 THEN _
  3681.          MO$ = MO$ + _
  3682.                ":"
  3683.       IF INSTR(SJ$,":") < 1 THEN _
  3684.          SJ$ = SJ$ + _
  3685.                ":"
  3686.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  3687.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + _
  3688.                                 ":"
  3689.       T$ = DIRECTORY.EXTENTION$
  3690.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  3691.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  3692.       S$ = UPLOAD.DIRECTORY$
  3693.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  3694.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".") - 1)
  3695.       DIRECTORY.EXTENTION$ = T$
  3696.       UPLOAD.DIRECTORY$ = S$
  3697.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3698.          DNLD.SUB = 0 : _
  3699.          FOR I = 1 TO 99 : _
  3700.             DNLD$(I) = "" : _
  3701.          NEXT
  3702.       IF NOT UPLOAD.TO.SUBDIR THEN _
  3703.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + _
  3704.                           ":"
  3705.       IF UPLOAD.TO.SUBDIR AND UPLOAD.SUBDIR$ <> "" THEN _
  3706.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  3707.       IF REQUIRED.RINGS = 0 AND _
  3708.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) <> "1Q0X1" THEN _
  3709.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) = "1Q0X1"
  3710.       IF REQUIRED.RINGS > 0 AND _
  3711.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "0Q0X1" THEN _
  3712.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "254  "
  3713. '
  3714. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION
  3715. '
  3716. 59030 WRITE #1,VERSION.NUMBER$, _
  3717.                DOWNLOAD.DRIVES$, _
  3718.                SYSOP.PASSWORD.1$, _
  3719.                SYSOP.PASSWORD.2$, _
  3720.                SYSOP.FIRST.NAME$, _
  3721.                SYSOP.LAST.NAME$, _
  3722.                REQUIRED.RINGS, _
  3723.                START.OFFICE.HOURS, _
  3724.                END.OFFICE.HOURS, _
  3725.                MINUTES.PER.SESSION!, _
  3726.                MAX.ALLOWED.MSGS.FRM.DEF, _
  3727.                ACT.MNTHS.B4.DELETING, _
  3728.                UPLOAD.DIRECTORY$,_
  3729.                EXPERT.USER, _
  3730.                ACTIVE.BULLETINS, _
  3731.                PROMPT.BELL, _
  3732.                PCJR, _
  3733.                MENUS.CAN.PAUSE, _
  3734.                MENU$(1), _
  3735.                MENU$(2), _
  3736.                MENU$(3), _
  3737.                MENU$(4), _
  3738.                MENU$(5), _
  3739.                MENU$(6), _
  3740.                CONFERENCE.MENU$, _
  3741.                CONFERENCE.VIEWER.SEC.LVL, _
  3742.                WELCOME.INTERRUPTABLE, _
  3743.                REMIND.FILE.TRANSFERS, _
  3744.                PAGE.LENGTH, _
  3745.                MAX.MESSAGE.LINES, _
  3746.                DOORS.AVAILABLE, _
  3747.                MO$
  3748.       IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
  3749.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  3750.                           BULLETIN.MENU$
  3751.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  3752.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  3753.                             BULLETIN.PREFIX$
  3754.       IF GLOBAL.FUNCTION(3) > MINIMUM.LOGON.SECURITY THEN _
  3755.          GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  3756.       IF FILES.FUNCTION(2) > MINIMUM.LOGON.SECURITY THEN _
  3757.          FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  3758.       IF LIBRARY.FUNCTION(4) > MINIMUM.LOGON.SECURITY THEN _
  3759.          LIBRARY.FUNCTION(4) = MINIMUM.LOGON.SECURITY
  3760.       IF LIBRARY.DRIVE$ = "" THEN _
  3761.          MAIN.FUNCTION(18) = 32767
  3762.       WRITE #1,MAIN.MESSAGE.FILE$, _
  3763.                MAIN.MESSAGE.BACKUP$, _
  3764.                CALLERS.FILE$, _
  3765.                COMMENTS.FILE$, _
  3766.                MAIN.USER.FILE$, _
  3767.                WELCOME.FILE$, _
  3768.                NEWUSER.FILE$, _
  3769.                DIRECTORY.EXTENTION$, _
  3770.                COM.PORT$, _
  3771.                BULLETINS.OPTIONAL, _
  3772.                USER.INIT.COMMAND$, _
  3773.                RTS$, _
  3774.                DOS.VERSION, _
  3775.                FG, _
  3776.                BG, _
  3777.                BORDER, _
  3778.                RBBS.BAT$, _
  3779.                RCTTY.BAT$
  3780.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  3781.                FIRST.NAME.PROMPT$, _
  3782.                HELP$(3), _
  3783.                HELP$(4), _
  3784.                HELP$(7), _
  3785.                HELP$(9), _
  3786.                BULLETIN.MENU$, _
  3787.                BULLETIN.PREFIX$, _
  3788.                DRIVE.FOR.BULLETINS$, _
  3789.                MESSAGE.REMINDER, _
  3790.                REQUIRE.NON.ASCII, _
  3791.                ASK.EXTENDED.DESC, _
  3792.                MAXIMUM.NUMBER.OF.NODES, _
  3793.                NETWORK.TYPE, _
  3794.                RECYCLE.TO.DOS, _
  3795.                MAX.USR.FILE.SIZE.FRM.DEF, _
  3796.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  3797.                TRASHCAN.FILE$
  3798.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  3799.                DEFAULT.SECURITY.LEVEL, _
  3800.                SYSOP.SECURITY.LEVEL, _
  3801.                FILESEC.FILE$, _
  3802.                SYSOP.MENU.SECURITY.LEVEL, _
  3803.                CONFMAIL.LIST$, _
  3804.                MAXIMUM.VIOLATIONS, _
  3805.                SYSOP.FUNCTION(1), _
  3806.                SYSOP.FUNCTION(2), _
  3807.                SYSOP.FUNCTION(3), _
  3808.                SYSOP.FUNCTION(4), _
  3809.                SYSOP.FUNCTION(5), _
  3810.                SYSOP.FUNCTION(6), _
  3811.                SYSOP.FUNCTION(7), _
  3812.                PASSWORD.FILE$, _
  3813.                MAXIMUM.PASSWORD.CHANGES, _
  3814.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  3815.                OVERWRITE.SECURITY.LEVEL, _
  3816.                DOORS.TERMINAL.TYPE, _
  3817.                MAX.PER.DAY
  3818.       WRITE #1,MAIN.FUNCTION(1), _
  3819.                MAIN.FUNCTION(2), _
  3820.                MAIN.FUNCTION(3), _
  3821.                MAIN.FUNCTION(4), _
  3822.                MAIN.FUNCTION(5), _
  3823.                MAIN.FUNCTION(6), _
  3824.                MAIN.FUNCTION(7), _
  3825.                MAIN.FUNCTION(8), _
  3826.                MAIN.FUNCTION(9), _
  3827.                MAIN.FUNCTION(10), _
  3828.                MAIN.FUNCTION(11), _
  3829.                MAIN.FUNCTION(12), _
  3830.                MAIN.FUNCTION(13), _
  3831.                MAIN.FUNCTION(14), _
  3832.                MAIN.FUNCTION(15), _
  3833.                MAIN.FUNCTION(16), _
  3834.                MAIN.FUNCTION(17), _
  3835.                MAIN.FUNCTION(18), _
  3836.                MIN.NEWCALLER.BAUD, _
  3837.                WAIT.BEFORE.DISCONNECT
  3838.       WRITE #1,FILES.FUNCTION(1), _
  3839.                FILES.FUNCTION(2), _
  3840.                FILES.FUNCTION(3), _
  3841.                FILES.FUNCTION(4), _
  3842.                FILES.FUNCTION(5), _
  3843.                FILES.FUNCTION(6), _
  3844.                FILES.FUNCTION(7), _
  3845.                FILES.FUNCTION(8), _
  3846.                UTILITY.FUNCTION(1), _
  3847.                UTILITY.FUNCTION(2), _
  3848.                UTILITY.FUNCTION(3), _
  3849.                UTILITY.FUNCTION(4), _
  3850.                UTILITY.FUNCTION(5), _
  3851.                UTILITY.FUNCTION(6), _
  3852.                UTILITY.FUNCTION(7), _
  3853.                UTILITY.FUNCTION(8), _
  3854.                UTILITY.FUNCTION(9), _
  3855.                UTILITY.FUNCTION(10), _
  3856.                UTILITY.FUNCTION(11), _
  3857.                UTILITY.FUNCTION(12), _
  3858.                GLOBAL.FUNCTION(1), _
  3859.                GLOBAL.FUNCTION(2), _
  3860.                GLOBAL.FUNCTION(3), _
  3861.                GLOBAL.FUNCTION(4), _
  3862.                UPLOAD.TIME.FACTOR!, _
  3863.                COMPUTER.TYPE, _
  3864.                REMIND.PROFILE, _
  3865.                RBBS.NAME$, _
  3866.                COMMANDS.BETWEEN.RINGS, _
  3867.                DF, _                                                 ' KG072303
  3868.                PAGING.PRINTER.SUPPORT$, _
  3869.                MODEM.INIT.BAUD$
  3870. 59035 WRITE #1,TURN.PRINTER.OFF,_
  3871.                DIRECTORY.PATH$,_
  3872.                MIN.SEC.TO.VIEW, _
  3873.                LIMIT.SEARCH.TO.FMS, _
  3874.                DEFAULT.CATEGORY.CODE$, _
  3875.                DIR.CATEGORY.FILE$, _
  3876.                NEW.FILES.CHECK, _
  3877.                MAX.DESC.LEN, _
  3878.                SHOW.SECTION, _
  3879.                COMMANDS.IN.PROMPT, _
  3880.                NEWUSER.SETS.DEFAULTS, _
  3881.                HELP.PATH$, _
  3882.                HELP.EXTENSION$, _
  3883.                MAIN.COMMANDS$, _
  3884.                FILE.COMMANDS$, _
  3885.                UTIL.COMMANDS$, _
  3886.                GLOBAL.COMMANDS$, _
  3887.                SYSOP.COMMANDS$
  3888.       WRITE #1,RECYCLE.WAIT, _
  3889.                LIBRARY.FUNCTION(1), _
  3890.                LIBRARY.FUNCTION(2), _
  3891.                LIBRARY.FUNCTION(3), _
  3892.                LIBRARY.FUNCTION(4), _
  3893.                LIBRARY.FUNCTION(5), _
  3894.                LIBRARY.FUNCTION(6), _
  3895.                LIBRARY.FUNCTION(7), _
  3896.                LIBRARY.DRIVE$, _
  3897.                LIBRARY.DIRECTORY.PATH$, _
  3898.                LIBRARY.DIRECTORY.EXTENTION$, _
  3899.                LIBRARY.WORK.DISK.PATH$, _
  3900.                LIBRARY.MAX.DISK, _
  3901.                LIBRARY.MAX.DIRECTORY, _
  3902.                LIBRARY.MAX.SUBDIR, _
  3903.                LIBRARY.SUBDIR.PREFIX$, _
  3904.                LIBRARY.ARCHIVE.PATH$, _
  3905.                LIBRARY.ARCHIVE.PROGRAM$, _
  3906.                LIBRARY.COMMANDS$
  3907.       WRITE #1,UPLOAD.PATH$, _
  3908.                FMS.DIRECTORY$, _
  3909.                ANS.MENU$, _
  3910.                REQUIRED.QUESTIONNAIRE$, _
  3911.                REMEMBER.NEW.USERS, _
  3912.                SURVIVE.NOUSER.ROOM, _
  3913.                PROMPT.HASH$, _
  3914.                START.HASH, _
  3915.                LEN.HASH, _
  3916.                PROMPT.INDIV$, _
  3917.                START.INDIV, _
  3918.                LEN.INDIV
  3919.       WRITE #1,BYPASS.MSGS, _
  3920.                MUSIC, _
  3921.                RESTRICT.BY.DATE, _
  3922.                DAYS.TO.WARN, _
  3923.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  3924.                VOICE.TYPE, _
  3925.                RESTRICT.VALID.CMDS, _
  3926.                NEW.USER.DEFAULT.MODE, _
  3927.                NEW.USER.LINE.FEEDS, _
  3928.                ARKVIEW.PATH$, _            'ViewArc Mod
  3929.                NEW.USER.BELL, _
  3930.                NEW.USER.CASE, _
  3931.                MESSAGES.CAN.GROW, _
  3932.                WRAP.CALLERS.FILE$, _
  3933.                REDIRECT.IO.METHOD, _
  3934.                AUTO.UPGRADE.SEC, _
  3935.                HALT.ON.ERROR, _
  3936.                NEW.PUBLIC.MSGS.SECURITY, _
  3937.                NEW.PRIVATE.MSGS.SECURITY, _
  3938.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  3939.                SL.CATEGORIZE.UPLOADS, _
  3940.                BAUDOT, _
  3941.                TIME.TO.DROP.TO.DOS, _
  3942.                EXPIRED.SECURITY, _
  3943.                DTR.DROP.DELAY, _
  3944.                ASK.IDENTITY, _
  3945.                MAX.REG.SEC, _
  3946.                BUFFER.SIZE, _
  3947.                MLCOM, _
  3948.                SHOOT.YOURSELF, _
  3949.                DEFAULT.EXTENSION$, _
  3950.                NEW.USER.DEFAULT.PROTOCOL$, _
  3951.                NEW.USER.GRAPHICS$, _
  3952.                NET.MAIL$, _
  3953.                MASTER.DIRECTORY.NAME$, _
  3954.                PROTO.DEF$, _
  3955.                UPCAT.HELP$, _
  3956.                ALWAYS.STREW.TO$, _
  3957.                LAST.NAME.PROMPT$
  3958.       MSB = LSB + 1
  3959.       LINE.CONTROL.REGISTER = LSB + 3
  3960.       MODEM.CONTROL.REGISTER = LSB + 4
  3961.       LINE.STATUS.REGISTER = LSB + 5
  3962.       MODEM.STATUS.REGISTER = LSB + 6
  3963.       WRITE #1,PERSONAL.DRVPATH$, _
  3964.                PERSONAL.DIR$, _
  3965.                PERSONAL.BEGIN, _
  3966.                PERSONAL.LEN, _
  3967.                PERSONAL.PROTOCOL$, _
  3968.                PERSONAL.CONCAT, _
  3969.                PRIVATE.READ.SEC, _
  3970.                PUBLIC.READ.SEC, _
  3971.                SEC.CHANGE.MSG, _
  3972.                KEEP.INIT.BAUD, _
  3973.                MAIN.PUI$, _
  3974.                DEFAULT.ECHOER$, _
  3975.                HOST.ECHO.ON$, _
  3976.                HOST.ECHO.OFF$, _
  3977.                SWITCH.BACK, _
  3978.                DEFAULT.LINE.ACK$, _
  3979.                ALTDIR.EXTENSION$, _
  3980.                DIRECTORY.PREFIX$
  3981.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  3982.                MODEM.INIT.WAIT.TIME, _
  3983.                MODEM.COMMAND.DELAY.TIME, _
  3984.                TURBO.RBBS, _
  3985.                DNLD.SUB, _
  3986.                WILL.SUBDIRS.B.USED, _
  3987.                UPLOAD.TO.SUBDIR, _
  3988.                DOWNLOAD.TO.SUBDIR, _
  3989.                UPLOAD.SUBDIR$, _
  3990.                MIN.OLDCALLER.BAUD, _
  3991.                MAX.WORK.VAR, _
  3992.                DISKFULL.GO.OFFLINE, _
  3993.                EXTENDED.LOGGING, _
  3994.                USER.RESET.COMMAND$, _
  3995.                USER.COUNT.RINGS.COMMAND$, _
  3996.                USER.ANSWER.COMMAND$, _
  3997.                USER.GO.OFFHOOK.COMMAND$, _
  3998.                DISK.FOR.DOS$, _
  3999.                DUMB.MODEM, _
  4000.                COMMENTS.AS.MESSAGES, _
  4001.                LSB, _
  4002.                MSB, _
  4003.                LINE.CONTROL.REGISTER, _
  4004.                MODEM.CONTROL.REGISTER, _
  4005.                LINE.STATUS.REGISTER, _
  4006.                MODEM.STATUS.REGISTER
  4007.       ORIG.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ + _
  4008.                        FILE.COMMANDS.DEFAULTS$ + _
  4009.                        UTIL.COMMANDS.DEFAULTS$ + _
  4010.                        LIBRARY.COMMANDS.DEFAULTS$ + _
  4011.                        GLOBAL.COMMANDS.DEFAULTS$ + _
  4012.                        SYSOP.COMMANDS.DEFAULTS$
  4013.       WRITE #1,KEEP.TIME.CREDITS, _
  4014.                XON.XOFF, _
  4015.                ALLOW.CALLER.TURBO, _
  4016.                USE.DEVICE.DRIVER$, _
  4017.                PRELOG$, _
  4018.                NEW.USER.QUESTIONNAIRE$, _
  4019.                EPILOG$, _
  4020.                REGISTRATION.PROGRAM$, _
  4021.                QUES.PATH$, _
  4022.                USER.LOCATION$, _
  4023.                USER.INITIALIZE.COMMAND$, _
  4024.                USER.FIRMWARE.CLEAR.CMND$, _
  4025.                USER.FIRMWARE.WRITE.CMND$, _
  4026.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  4027.                SIZE.OF.STACK, _
  4028.                SECURITY.EXEMPT.FROM.EPILOG, _
  4029.                USE.BASIC.WRITES, _
  4030.                DOSANSI, _
  4031.                ESCAPE.INSECURE, _
  4032.                USE.DIR.ORDER, _
  4033.                ADD.DIR.SECURITY, _
  4034.                MAX.EXTENDED.LINES, _
  4035.                ORIG.COMMANDS$
  4036.       IF MACRO.EXTENSION$ <> "" THEN _
  4037.          MACRO.EXTENSION$ = "." + MACRO.EXTENSION$
  4038.       CALL COLORCODE (FG.1.DEF$,FG.1.DEF$,X)
  4039.       CALL COLORCODE (FG.2.DEF$,FG.2.DEF$,X)
  4040.       CALL COLORCODE (FG.3.DEF$,FG.3.DEF$,X)
  4041.       CALL COLORCODE (FG.4.DEF$,FG.4.DEF$,X)
  4042.       WRITE #1,LOGON.MAIL.LEVEL$, _
  4043.                MACRO.DRVPATH$, _
  4044.                MACRO.EXTENSION$, _
  4045.                EMPHASIZE.ON.DEF$, _
  4046.                EMPHASIZE.OFF.DEF$, _
  4047.                FG.1.DEF$, _
  4048.                FG.2.DEF$, _
  4049.                FG.3.DEF$, _
  4050.                FG.4.DEF$, _
  4051.                SECVIO.HLP$, _
  4052.                FOSSIL, _
  4053.                MAX.CARRIER.WAIT, _
  4054.                CALLER.BKGRD, _
  4055.                SMART.TEXT, _
  4056.                TIME.LOCK, _
  4057.                WRITE.BUF.DEF, _
  4058.                SEC.KILL.ANY, _
  4059.                DOORS.DEF$, _
  4060.                SCREEN.OUT.MSG$, _
  4061.                AUTOPAGE.DEF$
  4062.       IF DNLD.SUB <1 OR DNLD.SUB > 99 THEN _
  4063.          GOTO 59080
  4064.       FOR I = 1 TO DNLD.SUB
  4065.          WRITE #1,DNLD$(I)
  4066.       NEXT
  4067. 59080 CLOSE #1
  4068. '
  4069. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  4070. '
  4071.       CLS
  4072.       LOCATE 12,1,1
  4073.       PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
  4074.       GOSUB 60380
  4075.       GOTO 60340
  4076. '
  4077. ' *  CONFIG.BAS'S ERROR ROUTINES
  4078. '
  4079. 60010 '* HANDLE ERROR CONDITIONS *
  4080.       IF ERR = 62 AND _
  4081.         (ERL = 11600 OR _
  4082.          ERL = 11620 OR _
  4083.          ERL = 11640 OR _
  4084.          ERL = 11660 OR _
  4085.          ERL = 11680 OR _
  4086.          ERL = 11700 OR _
  4087.          ERL = 11705 OR _
  4088.          ERL = 11706) THEN _
  4089.          PRINT CONFIG.FILENAME$ + _
  4090.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  4091.          PRINT "Please delete and rerun CONFIG." : _
  4092.          RESUME 60340
  4093.       IF ERL = 15780 AND ERR = 5 AND _
  4094.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  4095.          RESUME 16073
  4096.       IF ERL = 31000 AND ERR = 58 THEN _
  4097.          KILL A$ : _
  4098.          RESUME 31000
  4099.       IF ERL = 31030 AND ERR = 58 THEN _
  4100.          KILL A$ : _
  4101.          RESUME 31030
  4102.       IF ERL = 22120 AND ERR = 6 THEN _
  4103.          RESUME 22100
  4104.       IF ERL = 24750 AND ERR = 58 THEN _
  4105.          KILL A$ : _
  4106.          RESUME 24750
  4107.       IF ERL = 31020 THEN _
  4108.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4109.          RESUME 31035
  4110.       IF ERL = 50490 AND ERR = 58 THEN  _
  4111.          RESUME 50500
  4112.       IF ERL = 50540 AND ERR = 58 THEN  _
  4113.          RESUME 50550
  4114.       IF ERL = 50490 OR ERL = 50540 THEN _
  4115.          RESUME 15230
  4116.       IF ERL = 60471 THEN _
  4117.          IF ERR <> 76 THEN _
  4118.             RESUME 60478 _
  4119.          ELSE RESUME 60474
  4120.       IF ERL = 60480 THEN _
  4121.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  4122.          RESUME 60478
  4123.       IF ERR = 61 THEN _
  4124.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4125.          RESUME 60340
  4126.       IF ERR = 67 THEN _
  4127.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4128.          RESUME 60340
  4129.       IF ERR = 70 THEN _
  4130.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4131.          RESUME 60340
  4132.       IF ERR = 71 THEN _
  4133.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4134.          RESUME 60340
  4135.       IF ERR = 72 THEN _
  4136.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4137.          RESUME 60340
  4138.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4139. 60340 IF CONFERENCE.MODE = 1 THEN _
  4140.          DELAY! = FNTI! + 5
  4141.       GOSUB 60440
  4142. 60360 SYSTEM
  4143. '
  4144. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  4145. '
  4146. 60380 FOR I = 1 TO 2
  4147.         BEEP
  4148.       NEXT
  4149.       RETURN
  4150. '
  4151. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS
  4152. '
  4153. 60440 ' wait routine
  4154. 60450 IF FNTI! < DELAY! THEN _
  4155.          GOTO 60450
  4156.       RETURN
  4157. '
  4158. ' * COMMON ROUTINE TO CHECK DRIVE/PATH FOR FORMAT/EXISTENCE
  4159. '
  4160. 60470 IF LEN(STRNG$) < 1 THEN _
  4161.          GOTO 60476
  4162.       IS.OK = TRUE
  4163. 60471 NAME STRNG$ + "XX" AS STRNG$ + "XX"
  4164. 60474 BEEP
  4165.       CALL ASKRO ("Bad/missing drive/path <"+STRNG$+">  [R]e-enter, I)gnore, C)reate",24,ANS$)
  4166.       CALL ALLCAPS (ANS$)
  4167.       ON INSTR("RIC",ANS$) GOTO 60476,60478,60480
  4168. 60476 IS.OK = FALSE
  4169. 60478 RETURN
  4170. 60480 MKDIR LEFT$(STRNG$,LEN(STRNG$)-1)
  4171.       RETURN
  4172.